C# LINQ不是属性的一部分时进行转换

C# LINQ不是属性的一部分时进行转换,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我有这样一个问题: var q = db.GetTable<Person>().Where(x => x.Employer.CEO != null); 我希望能够做到这一点,并在属性中包装较长的表达式,这样我就不必重复嵌套表get: var q = db.GetTable<Person>().Where(x => x.HasCEO); var q=db.GetTable(),其中(x=>x.HasCEO); 如何创建LINQ属性以实现所需的结果 如果有必

我有这样一个问题:

var q = db.GetTable<Person>().Where(x => x.Employer.CEO != null);
我希望能够做到这一点,并在属性中包装较长的表达式,这样我就不必重复嵌套表get:

var q = db.GetTable<Person>().Where(x => x.HasCEO);
var q=db.GetTable(),其中(x=>x.HasCEO);
如何创建LINQ属性以实现所需的结果


如果有必要的话,我正在使用C#4.0。

你不能。LINQtoSQL的工作原理是检查查询的执行情况,而不是深入研究属性的实现以确定行是否符合您的条件


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

我可以创建一个返回表达式的属性吗?我想可以,但这将非常笨拙,几乎肯定会违反最小惊讶原则()。其他选项包括移动到实体框架或第三方ORM,如NHibernate,这将以一种不那么尴尬的方式支持这种类型的查询。EF比linq2sql更受限制,linq2nhibernate比EF更受限制,因此他不能在其中做这样的事情。如何更受限制?这在L2E中是完全可能的:该技术适用于任何表达式提供程序,并且有效地实现了Mark自己提出的创建返回表达式的属性的建议。
var q = db.GetTable<Person>().Where(x => x.HasCEO);