2012-10-05 79 views
3

我有這個類Variables它有多個成員,其中一個叫Name這是一個字符串。假設我有一個List<Variables>。這有NamesX,Y,Y,ZLiNQ有不同的結果

string variableName = 'Y'; 

int _totalCount = (from p in variableList 
        where p.Name == variableName 
        select p.Name).Count(); 

int _totalCount2 = variableList.Select(x => x.Name == variableName).Count(); 

問題:爲什麼_totalCount回報2這是我想要的),而_totalCount2回報4

+3

試着用'.Where'更換'.Select'。 – 3aw5TZetdf

回答

7

因爲Select沒有做什麼你認爲它的作用:它是一個投影,不是過濾。 表達式x => x.Name == variableName是針對您列表中的每個項目計算的。你會得到{False, True, True, False}。然後Count()被調用結果,返回4

過濾與Where方法,需要一個謂詞完成:

int _totalCount2 = variableList.Where(x => x.Name == variableName).Count(); 
+0

哦,我的壞,所以我會做什麼,使其返回'2'? – SkyDrive

+0

謝謝!但現在我有另一個問題。當我在兩個linq'.Distinct()。Count();'上添加'Distinct'時,第一個顯示1,第二個顯示2。爲什麼它不起作用? – SkyDrive

+0

@DerekFloss這是因爲你的第一個例子除了過濾之外還有一個投影。在'Distinct'之前添加'Select(x => x.Name)'去除重複的名字。 – dasblinkenlight