簡體   English   中英

從LINQ查詢的結果視圖中提取數字的不同方法

[英]Different Ways to Pull Number From Results View Of LINQ Query

我有一個數字數組,我試圖查看在數組中出現3次的數字的值。 例如,這里是數字[4、4、4、3、3]的數組,當我將它作為骰子傳遞給此查詢時:

var triples = dice.GroupBy(x => x).Where(g => g.Count() > 2).Select(y => y.Key);

我可以在三元組對象的結果視圖中看到一個4 ,這是我想要的,但是我如何將該數字拉出並放入變量中以使用呢? 我還不太了解LINQ。 謝謝!

現在,我得到以下類型的對象: System.Linq.Enumerable.WhereSelectEnumerableIterator<System.Linq.IGrouping<int,int>,int>作為三元組的值,當我深入該對象時,我可以看到所需的值結果視圖中的“ 4”

如果需要獲取第一個數字,則至少發生3次,請使用First()擴展方法

var firstTriple = dice.Where(...).First();

如果您想確保它只是一項,則為Single,否則拋出異常。

如果需要陣列

var triples = dice.Where(...).ToArray()

在獲取數據之前,初始查詢不會過濾任何值(調用ToArray(),First(),使用foreach進行迭代)。

var query = dice.Where(...); // not executed
query = query.GroupBy(...);  // not executed
query = query.Select(...);   // not executed
query = query.OrderBy();     // not executed
var result = query.ToArray();// executed only at this moment;
// or in foreach loop
foreach(var item in query){  // 
   //
}

添加ToList / ToArray / First / FirstOrDefault

var triples = dice.GroupBy(x => x)
                  .Where(g => g.Count() > 2)
                  .Select(y => y.Key)
                  .ToList();

大多數linq方法的執行方式不同-意味着它們不在編寫它們的行處執行,而僅在需要具體結果時執行。 調用以下方法時發生: ToList / ToArray / First / FirstOrDefault / Sum / Count ...

如果沒有上面的ToList ,您將看到該linq的“執行計划”,並且在按下“結果視圖”時實際上會執行它。

在正常的代碼流中,您可能會在某個時候實際使用triples (例如,在foreach循環中打印到控制台),然后將其執行。


這是解釋以上內容的代碼段。 將斷點放在foreachSelect ,然后立即運行斷點,然后使用ToList()一次,看看區別。

List<int> data = new List<int> { 1, 1, 1, 2, 2, 3, 3, 3, 4 };

var triples = data.GroupBy(x => x)
                  .Where(g => g.Count() > 2)
                  .Select(y => y.Key); // put breakpoint here

foreach(var item in triples) //Put breakpoint here
{
   Debug.Write(item);
}

有關更多信息,請閱讀LINQ和延遲執行

var firstTriple = triples.FirstOrDefault();

干凈利落。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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