У меня есть таблица базы данных Item
и доступ к ней осуществляется с помощью linq-to-sql.
Я могу определить пользовательский метод IsSpecial() для Items, который возвращает true, если квадратный корень Item.id четен:
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)
What правильный синтаксис для определения этого метода?
Это не работает:
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)