是否可以在C#中的LINQ扩展方法中创建匿名类型?
是否可以在C#中的LINQ扩展方法中创建匿名类型 例如LINQ查询是否可以在C#中的LINQ扩展方法中创建匿名类型?,c#,linq,extension-methods,C#,Linq,Extension Methods,是否可以在C#中的LINQ扩展方法中创建匿名类型 例如LINQ查询 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_
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扩展方法是否支持相同的行为您显示的LINQ查询是一个扩展方法。编译器只需将其转换为对
Join
扩展方法的调用。您可以在任何可以创建任何类型的地方创建匿名类型,包括在任何扩展方法中。您显示的LINQ查询是一个扩展方法。编译器只需将其转换为对Join
扩展方法的调用。您可以在任何可以创建任何类型的地方创建匿名类型,包括在任何扩展方法中。类似的内容可能
var CAquery=CATemp.Join(.....)
.Select(temp=>new
{
CUSIP = temp.equity_cusip,
CompName = temp.company_name,
Exchange = temp.primary_exchange
});
像这样的可能
var CAquery=CATemp.Join(.....)
.Select(temp=>new
{
CUSIP = temp.equity_cusip,
CompName = temp.company_name,
Exchange = temp.primary_exchange
});
你的意思是“使用扩展方法语法时”?如果是的话,绝对是这样。您的查询完全等同于:
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
)保持为可用,该匿名类型仅将它们保留在一个值中
每个查询表达式都可以表示为非查询表达式代码。查询表达式实际上是一种预处理形式。您的意思是“在使用扩展方法语法时”?如果是的话,绝对是这样。您的查询完全等同于:
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
)保持为可用,该匿名类型仅将它们保留在一个值中
每个查询表达式都可以表示为非查询表达式代码。查询表达式实际上是预处理的一种形式。显然,如果要在方法之间传递这些匿名对象,可能会遇到麻烦。例如?@spender,我可以在代码中的不同位置轻松使用匿名类型。什么意思?当返回或传递匿名对象时,可以将其作为object或泛型类型T传递。在这两种情况下,对象接口的所有知识都将丢失。显然,如果要在方法之间传递这些匿名对象,你可能会遇到麻烦。比如?@spender我可以很容易地在代码的不同位置使用匿名类型。什么意思?当您返回或传递匿名对象时,您可以将其作为object或泛型类型T传递。在这两种情况下,对象接口的所有知识都将丢失。