如何重构 LINQ select 语句

本文关键字:LINQ select 语句 重构 何重构 | 更新日期: 2023-09-27 18:35:28

给定以下 LINQ 语句,有人可以告诉我是否可以将选择部分重构为表达式树吗?我以前没有使用过表达式树,也无法找到有关选择的太多信息。请注意,这将转换为 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 });

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

如何重构 LINQ select 语句

您可以使用 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()添加到您的智商中。
  2. 在使用方法之前,必须将方法分配给局部变量(不确定确切原因,但这是必须的)。