char[] delimiter = new char[] {' '};
string[] names = name.Trim().Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
employees = (List<CMSUser>)employees.Where(
e =>
(e.FirstName.Contains(names[0]) && e.LastName.Contains(names[1])) ||
(e.LastName.Contains(name[0]) && e.FirstName.Contains(name[1]))
)
上面,我正在尝试使用Linq lambda来查询员工列表。我需要拆分在空格字符输入框中输入的搜索词,并使用它从员工列表中提取匹配(FirstName&amp;&amp; LastName)OR(LastName&amp;&amp; FirstName),其中包含由空格分隔的那两个搜索词。 / p>
我不知道我在查询条件中做错了什么。它将列表中的所有员工返回,而不是给出那些匹配条件。
答案 0 :(得分:3)
我认为问题发生在你的第二个OR条款中:
(e.LastName.Contains(name[0]) && e.FirstName.Contains(name[1])
它应该是names
而不是name
,否则它会分别获得name
变量的第一个和第二个字符。
答案 1 :(得分:0)
将Where()
返回的IEnumerable转换为List应该不起作用。相反,您可以使用ToList()
:
employees = employees.Where(
e =>
(e.FirstName.Contains(names[0]) && e.LastName.Contains(names[1])) ||
(e.LastName.Contains(names[0]) && e.FirstName.Contains(names[1]))
)
.ToList();