Один из способов, который вы можете попробовать, это использовать пространство имен System.Linq.Expressions и метод расширения AsExpandable, доступный здесь .
Я думаю, вы могли бы передать выражение в метод FirstOrDefault
, и если вы все еще хотите использовать MyProperty
в другом месте, вы можете использовать это же выражение для вычисления его значения.Таким образом, у вас будет что-то вроде:
public partial class Offer
{
public static Expression<Func<Offer, bool>> exp
{
get
{
return o => o.Property1 * o.Property2 == someValue;
}
}
public bool MyProperty
{
get
{
return exp.Compile()(this);
}
}
}
Затем вы передадите его:
_myEntities.OfferSet.AsExpandable().FirstOrDefault(Offer.exp.Compile()));
Если ваши вычисления можно преобразовать в дерево выражений, которое понимает SQL,думаю это сработает.Он работал с не-Entity тестовым классом, но использование его с LINQ to Entities - это другое животное.
Я не очень много использовал AsExpandable, поэтому этот код может быть неправильным.Я открыт для исправлений.