是否可以在C#中使用LINQ扩展方法创建匿名类型?

时间:2013-05-09 17:03:36

标签: c# linq extension-methods

是否可以在C#中使用LINQ扩展方法创建匿名类型?

例如LINQ query.i.e。

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扩展方法是否支持相同的行为?

3 个答案:

答案 0 :(得分:3)

您的意思是“使用扩展方法语法时”吗?如果是这样,绝对。您的查询完全等同于:

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)可用,一个新的匿名类型,它只是将它们保持在一个值中。

每个查询表达式都可以表示为非查询表达式代码。查询表达式实际上是一种预处理形式。

答案 1 :(得分:1)

这样的事可能......

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

答案 2 :(得分:-1)

您显示的的LINQ查询是一种扩展方法。它将被编译器简单地转换为对Join扩展方法的调用。您可以在任何可以创建任何类型的地方创建匿名类型,其中包括任何扩展方法。