我有一个名为Item
的数据库表,并使用linq-to-sql进行访问。
我可以为Item定义一个自定义方法IsSpecial(),如果Item.id的平方根是偶数,则返回true:
partial class Item
{
public static Expression<Func<Item, bool>> IsSpecial = (i => Math.Sqrt(i.Id)%2==0);
}
那么我可以在linq-to-sql查询中使用该属性,例如:
datacontext.Item.Where(Item.IsSpecial)
现在出于美观的原因,我想将IsSpecial变为非静态,并修改它以便我可以像这样调用它:
datacontext.Item.Where(i => i.IsSpecial())
理想情况下,这也应该允许组合语句,而上述(可行的)句法不允许此操作:
datacontext.Item.Where(i => i.IsSpecial() && i.Id >100)
如何正确定义这个方法的语法?
以下内容是不起作用的:
partial class Item
{
public Expression<Func<bool>> IsSpecial = ( () => Math.Sqrt(this.Id)%2==0 );
// 'this' keyword not available in current context
}
编辑: 我开始怀疑我正在要求语法根本不允许
我想我可以接受 datacontext.Item.Where(Item.IsSpecial).Where(i => i>100)
datacontext.Item.Where(i => Item.IsSpecial(i))
无法编译。 - leppiedatacontext.Item.Where(Item.IsSpecial)
可以编译通过。 - leppie