[英]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
循環中打印到控制台),然后將其執行。
這是解釋以上內容的代碼段。 將斷點放在foreach
和Select
,然后立即運行斷點,然后使用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.