簡體   English   中英

linq兩個選擇計數查詢之間的差異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM