[英]linq difference between two select count queries
我正在嘗試了解linq查詢。 我有一個包含8個元素的_taskDetail列表。 我不明白為什么下面的第一個查詢返回答案8? 是的,列表包含8個元素,但所有td.Names不同,並且我指定了td.Name == taskName,所以為什么它返回所有內容,即使td.Name不等於taskName的元素也是如此?
第二個查詢給了我預期的正確答案1。
var Ans1 = _taskDetail.Select(td => td.Name == taskName).Count();
var Ans2 = (from tdList in _taskDetail
where tdList.Name == taskName
select tdList).Count();
Ans1 = 8
Ans2 = 1
第一個版本沒有意義,您需要一個Where
,而不是一個Select
,它是一個投影,而不是一個過濾器。
在第一個版本中,Select將返回IEnumerable<bool>
(對於列表中的每個項目,如果Name == taskName
,它將返回true,否則返回false。因此,將返回所有項目,並且計數將得出你...清單的數目。
所以
_taskDetail.Where(td => td.Name == taskName).Count();
順便說一句,你可以簡單地做
_taskDetail.Count(td => td.Name == taskName);
細節也許會更好地理解
與您的實際(錯誤)第一個版本(方法語法)相對應的第二個(錯誤)版本(查詢語法)為
(from tdList in _taskDetail
select tdList.Name == taskName).Count();
這是因為第一個查詢是錯誤的。 Select
僅產生投影,它不過濾結果。 正確的執行方法是使用Where
而不是Select
...
var Ans1 = _taskDetail.Where(td => td.Name == taskName).Count();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.