是否可以在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扩展方法是否支持相同的行为?
答案 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
子句)编译器会引入透明标识符以保持两个范围变量(temp
和casect
)可用,一个新的匿名类型,它只是将它们保持在一个值中。
每个查询表达式都可以表示为非查询表达式代码。查询表达式实际上是一种预处理形式。
答案 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
扩展方法的调用。您可以在任何可以创建任何类型的地方创建匿名类型,其中包括任何扩展方法。