1

鉴于以下 LINQ 语句,有人可以告诉我是否可以将选择部分重构为表达式树?我以前没有使用过表达式树,也找不到关于 Selects 的太多信息。请注意,这是要翻译成 SQL 并在 SQL Server 中运行,而不是在内存中。

var results = db.Widgets
    .Select(w => new
    {
        Name = (w is x) ? "Widget A" : "Widget B"
    });

我希望能够做到这一点..

var name = [INSERT REUSABLE EXPRESSION]
var somethingElse = [INSERT REUSABLE EXPRESSION]
var results = db.Widgets.Select(w => new { Name = name, SomethingElse = somethingElse });

显然,预期用途是用于更复杂的语句。

4

1 回答 1

0

您可以使用LinqKit做到这一点。只要您的方法可转换为 SQL,它就会起作用。这基本上是一个完整示例的样子:

public static class ReusableMethods
{
    public static Expression<Func<int, Person>> GetAge()
    {
        return p => p.Age;
    }
}

var getAge = ReusableMethods.GetAge();
var ageQuery = from p in People.AsExpandable()
               select getAge.Invoke(p);

注意:

  1. 您需要添加AsExpandable()到您的 IQueryable。
  2. 在使用方法之前,您必须将方法分配给局部变量(不确定确切原因,但这是必须的)。
于 2013-10-15T16:55:44.713 回答