【发布时间】:2015-04-14 02:53:59
【问题描述】:
在最近的EF Code First 项目中,我们尝试使用不同的技术优化一些 Linq 查询(不要担心这还不算早)。优化 linq 查询的一种常见方法是将更多表达式从 Linq-to-Objects 转换为几乎所有 Linq-to-Entities 端,这通常比将 Linq-to-Objects 和 Linq-to-Entities 与 lazy loading 混合更快。
我已经阅读了如何为大多数可转换为 Linq-To-Entities 的查询创建 linq 表达式,但我不确定如何使用 object initializer syntax 执行此操作。
举个例子:
return results.Select(x => new { Name = x.FullName });
来自下落的例子Person类:
public class Person
{
public string FullName
{
get { return FirstName + " " + LastName; }
}
public string FirstName { get; set; }
public string LastName { get; set; }
}
现在,我可以将第一个表达式转换为 Linq-to-Entity 友好表达式:
return results.Select(x => new { Name = x.FirstName + " " + x.LastName});
但是这种情况很糟糕,因为我正在复制 FullName 的逻辑。现在您可以说对于这样一个微不足道的示例来说这无关紧要,但不难想象具有更复杂的只读属性的情况。
无论如何,我正在尝试弄清楚是否有办法做这样的事情:
return results.Select(x => new { Name = Person.FullNameExpression(x) });
谁能告诉我这样的事情在 Linq-to-entities 中是否可行,而不使用 Linq-to-objects?
如果这是不可能的,我能得到的最接近的方法是防止在我的实体上重复只读属性的逻辑?
【问题讨论】:
标签: c# entity-framework ef-code-first linq-to-entities object-initializers