Нестатическое выражение> с доступом к 'this'

У меня есть таблица базы данных 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)

8
задан HugoRune 12 April 2012 в 16:56
поделиться