Linq查询条件(x&& x)|| (x& x)

时间:2012-10-31 02:12:11

标签: c# linq

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>

我不知道我在查询条件中做错了什么。它将列表中的所有员工返回,而不是给出那些匹配条件。

2 个答案:

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