2012-10-31 48 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