如何重构 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 });
显然,预期用途是用于更复杂的语句。
您可以使用 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);
请注意:
- 您需要将
AsExpandable()
添加到您的智商中。 - 在使用方法之前,必须将方法分配给局部变量(不确定确切原因,但这是必须的)。