我有一个数据库表Item
并使用 linq-to-sql 访问它。
我可以为 Items 定义一个自定义 Method 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())
理想情况下,这也允许组合语句,而上述(工作)snytax 不允许:
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)