2012-10-31 47 views
1
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来查询员工列表。我需要将输入框中输入的搜索词拆分为空格字符,并使用它从员工列表中匹配(名字& &姓氏)或(姓氏& &名字),其中包含由空格分隔的两个搜索词。Linq查询条件(x && x)|| (x&x)

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

+0

带有用名称的变量是有用的。 – 2012-10-31 04:05:46

回答

3

我想你第二个OR子句中的问题发生:

(e.LastName.Contains(name[0]) && e.FirstName.Contains(name[1]) 

应该namesname,否则分别为name变量获得第一和第二个字符。

+0

好赶上!!!!! – ivowiblo

+0

@ivowiblo谢谢! – rikitikitik

+0

@rikitikitik非常感谢! – Krish

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

@RiskyMartis是的,我在那里已经在我的代码然后orderby和take和ToList。感谢您注意:) – Krish