繁体   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