簡體   English   中英

LINQ 搜索多個列並確定它匹配的列

[英]LINQ search on multiple columns and determine on what column it matched on

我正在搜索多個列我想確定哪一列與結果中的搜索文本匹配。

例如,我有一個這樣的表:

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));

我會得到兩個結果:

昵稱
詹姆士 能源部 鮑比
能源部 詹姆士

有沒有一種方法可以從我的結果中確定誰在哪一列上匹配?

我合理地用谷歌搜索了這個,將不勝感激朝正確方向輕推。

嘗試這個:

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());

使用您問題中非常方便的示例數據,我得到了這個:

結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM