LINQ在不属于属性时进行转换

本文关键字:转换 属性 不属于 LINQ | 更新日期: 2023-09-27 18:24:27

我有一个这样的查询:

var q = db.GetTable<Person>().Where(x => x.Employer.CEO != null);

这个虚构的查询将返回给定人员工作的公司首席执行官的ID。这很好用,但如果我做这样的事情,它会出现无法转换为SQL的错误:

public class Person
{
  public bool HasCEO
  {
    get
    {
      return this.Employer.CEO != null;
    }
  }
}

我希望能够做到这一点,并将较长的表达式包装在一个属性中,这样我就不必重复嵌套的表get:

var q = db.GetTable<Person>().Where(x => x.HasCEO);

如何创建LINQ属性以获得所需的结果?

如果这很重要的话,我正在使用C#4.0。

LINQ在不属于属性时进行转换

你不能。LINQ to SQL的工作原理是检查查询的表达式树,而不是深入研究属性的实现来确定一行是否符合您的条件。

您所能做的是在SQL server中创建一个动态计算该属性的视图,并查询该视图而不是表。