Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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 to SQL中select中的表达式_C#_Entity Framework_Linq_Iqueryable - Fatal编程技术网

C# LINQ to SQL中select中的表达式

C# LINQ to SQL中select中的表达式,c#,entity-framework,linq,iqueryable,C#,Entity Framework,Linq,Iqueryable,如果我使用LINQ to对象,我可以在Select中使用Func,如下所示: Enumerable.Range(1, 10).Select(x => new { A = x, B = SomeFunc }); Func<int, long> SomeFunc = x => x * x; Expression<Func<int, long>> SomeExpr = x => x * x; 其中SomeFunc是这样的: Enumerabl

如果我使用LINQ to对象,我可以在Select中使用
Func
,如下所示:

Enumerable.Range(1, 10).Select(x => new { A = x, B = SomeFunc });
Func<int, long> SomeFunc = x => x * x;
Expression<Func<int, long>> SomeExpr = x => x * x;
其中
SomeFunc
是这样的:

Enumerable.Range(1, 10).Select(x => new { A = x, B = SomeFunc });
Func<int, long> SomeFunc = x => x * x;
Expression<Func<int, long>> SomeExpr = x => x * x;
其中
SomeExpr
是这样的:

Enumerable.Range(1, 10).Select(x => new { A = x, B = SomeFunc });
Func<int, long> SomeFunc = x => x * x;
Expression<Func<int, long>> SomeExpr = x => x * x;
表达式SomeExpr=x=>x*x;

如何在Select in查询中使用表达式?

问题是x=>new{…}已经是作为参数传递给Select(…)的表达式。如果在select表达式中编译并调用SomeExpr,代码将正常工作

Expression<Func<int, long>> SomeExpr = x => x * x;

var query = Enumerable.Range(1, 10)
                      .AsQueryable()
                      .Select(x => new { A = x, B = SomeExpr.Compile().Invoke(x) });
表达式SomeExpr=x=>x*x;
变量查询=可枚举的范围(1,10)
.AsQueryable()
.Select(x=>new{A=x,B=SomeExpr.Compile().Invoke(x)});

您必须编译并执行查询

var query2 = Enumerable.Range(1, 10)
                  .AsQueryable()
                  .Select(x => new { A = x, B = SomeExpr.Compile().DynamicInvoke(x) });

也许你可以试试System.Linq.Expression-Class(),你是否可以使用第三方软件包?为什么要在查询中投影的对象中使用
Func
?这意味着我不能使用“System.Linq.Expressions.Expression”?我想使用Func或Expression,因为我需要将一些代码移动到另一个程序集。我想使用表达式,因为Func不适用于IQueryableUnfortunatelly,我遇到了异常“LINQ to Entities无法识别方法'System.Object DynamicInvoke(System.Object[])方法,并且此方法无法转换为存储表达式。”