Я бы хотел отфильтровать свои объекты в зависимости от результата работы функции с их свойствами.
т.е.Я получил объект, подобный этому:
public class Lorem
{
public int A {get;set;}
public int B {get;set;}
public int C {get;set;}
public double DoMath(int externalValue)
{
// real implementation is longer and more complex
if(A==B) {
// some calculations
return 0.2;
}
if(B==C) {
// some calculations
return 0.9;
}
else return 0;
}
}
Теперь я запрашиваю объекты, и я хотел бы получить только те, у которых DoMath> 0.
// simplified scenario for example purpose
int someValue = 95;
// working with Entity Framework 4.1 Code First
var filtered = db.Lorems.Where(x=>x.DoMath(someValue) > 0);
Я получаю эту ошибку:
LINQ to Entities не распознает метод -----, и этот метод нельзя преобразовать в выражение хранилища.
Можно ли заставить его работать так?
Мои навыки в настройке лямбда-выражений и работе с делегатами довольно скудны, поэтому я хотел бы получить некоторую помощь.
Редактировать: вот эта функция «DoMath» работает с реальным кодом (без комментариев, потому что они нена английском):
public double VypocitejPrislusnost(int value)
{
if (A == B)
{
if (value <= C)
{
return 1;
}
if (value > D)
{
return 0;
}
else
{
double b = D - C;
double tangens = Math.Tan(1 / b);
double a = tangens * (D - value);
return Math.Round(a, 2);
}
}
if (C == D)
{
if (value >= B)
{
return 1;
}
if (value <= A)
{
return 0;
}
else
{
double b = B - A;
double tangens = Math.Tan(1 / b);
double a = tangens * (value - A);
return Math.Round(a, 2);
}
}
else
{
if (value >= B && value <= C)
{
return 1;
}
if (value <= A || value >= D)
{
return 0;
}
if (value > A && value < B)
{
double b = B - A;
double tangens = Math.Tan(1 / b);
double a = tangens * (value - A);
return Math.Round(a, 2);
}
if (value > C && value < D)
{
double b = D - C;
double tangens = Math.Tan(1 / b);
double a = tangens * (D - value);
return Math.Round(a, 2);
}
else
{
return 0;
}
}
}
В основном он вычисляет координату y в треугольнике в различных сценариях.Я использую это для подсчета того, насколько данное значение вписывается в нечеткое множество.