Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在C#中的LINQ扩展方法中创建匿名类型?_C#_Linq_Extension Methods - Fatal编程技术网

是否可以在C#中的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_

是否可以在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_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传递。在这两种情况下,对象接口的所有知识都将丢失。