0

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

4

3 回答 3

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

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

于 2013-05-09T17:13:00.890 回答
1

像这样的东西也许......

var CAquery=CATemp.Join(.....)
                  .Select(temp=>new
                           {       
                           CUSIP = temp.equity_cusip,
                           CompName = temp.company_name,
                           Exchange = temp.primary_exchange       
                           });
于 2013-05-09T17:11:49.470 回答
-1

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

于 2013-05-09T17:10:45.830 回答