簡體   English   中英

將查詢理解翻譯為LINQ中的Enumerable擴展方法

[英]Translating query comprehension to Enumerable extension methods in LINQ

如何將以下查詢轉換為函數調用? 我知道編譯器在幕后執行此操作但不知道如何查看結果

        var query = from item in Enumerable.Range(0, 10)
                    from item2 in Enumerable.Range(item, 10)
                    from item3 in Enumerable.Range(item2, 10)
                    select new { item, item2, item3 };

在這種情況下,它使用SelectMany和一個名為透明標識符的概念來保​​留現有的范圍變量。 因此,您的查詢將轉換為:

var query = Enumerable.Range(0, 10)
                      .SelectMany(item => Enumerable.Range(item, 10),
                                  (item, item2) => new { item, item2 })
                      .SelectMany(z => Enumerable.Range(z.item2, 10),
                                  (z, item3) => new { z.item, z.item2, item3 });

(在這種情況下, z是透明標識符。如果在最后一個from子句之后有where子句或者除了select之外的任何東西,則會引入另一個透明標識符。)

翻譯都在C#語言規范的第7.16節中描述。

暫無
暫無

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

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