鉴于以下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 });
显然,预期用途是用于更复杂的陈述。
答案 0 :(得分: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);
请注意:
AsExpandable()
添加到IQueryable。