0

我正在搜索多个列我想确定哪一列与结果中的搜索文本匹配。

例如,我有一个这样的表:

var names = new[]
{
    new { FirstName = "James", LastName = "Doe", NickName = "Bobby", },
    new { FirstName = "Joe", LastName = "Doe", NickName = "Joey", },
    new { FirstName = "Cookie", LastName = "Monster", NickName = "Rick", },
    new { FirstName = "Bob", LastName = "Magoo", NickName = "George", },
    new { FirstName = "Mark", LastName = "Hsmil", NickName = "Masrkie", },
    new { FirstName = "Joe", LastName = "Doe", NickName = "James", },
};

和这样的查询:

string searchText = "James";

var result = names
        .Where(x => x.FirstName.Contains(searchText)
            || x.LastName.Contains(searchText)
            || x.NickName.Contains(searchText));

我会得到两个结果:

昵称
詹姆士 能源部 鲍比
能源部 詹姆士

有没有一种方法可以从我的结果中确定谁在哪一列上匹配?

我合理地用谷歌搜索了这个,将不胜感激朝正确方向轻推。

4

1 回答 1

3

尝试这个:

string searchText = "James";

var result =
    names
        .Select(x => new
        {
            name = x,
            matches =
                new[]
                {
                    x.FirstName.Contains(searchText) ? "FirstName" : null,
                    x.LastName.Contains(searchText) ? "LastName" : null,
                    x.NickName.Contains(searchText) ? "NickName" : null,
                }
                    .Where(y => y != null)
                    .ToArray(),
        })
        .Where(x => x.matches.Any());

使用您问题中非常方便的示例数据,我得到了这个:

结果

于 2021-06-04T09:40:42.493 回答