LINQ to SQL 中 select 中的表达式

zam*_*tex 5 c# linq entity-framework iqueryable

如果我使用 LINQ to Objects,我可以Func<TIn, TOut>在 Select 中使用,如下所示:

Enumerable.Range(1, 10).Select(x => new { A = x, B = SomeFunc });
Run Code Online (Sandbox Code Playgroud)

哪里SomeFunc有这样的东西:

Func<int, long> SomeFunc = x => x * x;
Run Code Online (Sandbox Code Playgroud)

但是使用 LINQ to Entities、Func 不起作用,我必须使用表达式。并且这段代码不起作用:

var query = Enumerable.Range(1, 10)
                   .AsQueryable()
                   .Select(x => new { A = x, B = SomeExpr });
Run Code Online (Sandbox Code Playgroud)

哪里SomeExpr有这样的东西:

Expression<Func<int, long>> SomeExpr = x => x * x;
Run Code Online (Sandbox Code Playgroud)

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

Pat*_*ick 0

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

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) });
Run Code Online (Sandbox Code Playgroud)