[英]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.