簡體   English   中英

是否可以在C#中的LINQ擴展方法中創建匿名類型?

[英]Is it possible to create anonymous type in LINQ extension methods in C#?

是否可以在C#中的LINQ擴展方法中創建匿名類型?

例如LINQ query.ie

var CAquery = from temp in CAtemp
 join casect in CAdb.sectors
 on temp.sector_code equals casect.sector_code
 select new
 {       
     //anonymous types
     CUSIP = temp.equity_cusip,
     CompName = temp.company_name,
     Exchange = temp.primary_exchange       
 };

C#中的LINQ擴展方法是否支持相同的行為?

您的意思是“使用擴展方法語法時”嗎? 如果是這樣,絕對。 您的查詢完全等同於:

var CAquery = CAtemp.Join(CAdb.sectors,
                          temp => temp.sector_code,
                          casect => casect.sector_code,
                          (temp, casect) => new
                          {       
                              CUSIP = temp.equity_cusip,
                              CompName = temp.company_name,
                              Exchange = temp.primary_exchange       
                          });

C#語言規范在7.16節中列出了所有翻譯。 請注意,在這種情況下,由於您的join子句后跟一個select子句,因此投影是在Join調用內執行的。 否則(例如,如果您有where子句),編譯器將引入透明標識符,以通過一個新的匿名類型(使它們對保持在單個值中)來保持兩個范圍變量( tempcasect )可用。

每個查詢表達式都可以表示為非查詢表達式代碼。 查詢表達式實際上是預處理的一種形式。

像這樣的東西

var CAquery=CATemp.Join(.....)
                  .Select(temp=>new
                           {       
                           CUSIP = temp.equity_cusip,
                           CompName = temp.company_name,
                           Exchange = temp.primary_exchange       
                           });

您顯示的LINQ查詢一種擴展方法。 編譯器會將其簡單地轉換為對Join擴展方法的調用。 您可以在任何可以創建任何類型的位置(包括任何擴展方法內部)創建匿名類型。

暫無
暫無

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

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