Подскажите оптимально решение в следующей задаче:
имеем линQ выражение
var list = (from t in table
select new Record
{
pole1 = t.pole1,
pole2 = t.pole2,
poleResult = Calculate(t.date1, t.date2)
}
Функцию/метод внутри LinQ ставить нельзя, как обойти?
Неужто после получения массива снова нужно в цикле проходить и вычислять значение дополнительного поля ?
Здравствуйте, Alexys, Вы писали:
A>Функцию/метод внутри LinQ ставить нельзя
Да ну? Правда чтоли? Попробую после обеда.
Правда, я пишу LINQ-выражения в функциональном виде. Может быть, в этом причина?
Здравствуйте, Nikolay_Ch, Вы писали:
N_C>Здравствуйте, Alexys, Вы писали:
A>>Функцию/метод внутри LinQ ставить нельзя, как обойти? N_C>Может все таки не в обычном LINQ, а в Entity Framework?
Здравствуйте, Mihas, Вы писали:
M>Да ну? Правда чтоли? Попробую после обеда.
Попробуйте... Сделайте LINQ-запрос с собственной функцией в EF...
M>Правда, я пишу LINQ-выражения в функциональном виде. Может быть, в этом причина?
Нет, не в этом.
Здравствуйте, Alexys, Вы писали:
A>Здравствуйте, Nikolay_Ch, Вы писали:
N_C>>Здравствуйте, Alexys, Вы писали:
A>>>Функцию/метод внутри LinQ ставить нельзя, как обойти? N_C>>Может все таки не в обычном LINQ, а в Entity Framework?
A>да в ентити
В Entity абы что вставить нельзя. Надо четко понимать, что это потом трансформируется в запрос sql.
Можно сделать сперва выборку из sql. А потом в памяти.
var list = (from t in table
select new Record
{
pole1 = t.pole1,
pole2 = t.pole2,
}).ToArray();
var list2 =(from t in list
select new Record
{
pole1 = t.pole1,
pole2 = t.pole2,
poleResult = Calculate(t.date1, t.date2)
}
).ToArray();
Здравствуйте, Alexys, Вы писали:
A>Подскажите оптимально решение в следующей задаче:
Во-первых, можно выбрать все на клиент и там уже применить функцию.
Во-вторых, можно определить эту функцию в базе и сделать расширение к EF, которое будет вызывать эту функцию.
Здравствуйте, AndrewVK, Вы писали:
AVK>В linq2db вполне возможно что вообще делать ничего не придется, он простые ситуации должен сам распознавать.
С подобным проблем не будет. В финальном Select, если это не Union и не Distinct можно использовать любой клиентский код, кроме случаев использования принудительно генерируемых SQL выражений. Например:
...
select Sql.IsNull(MyMethod(f.Fields), 0)
где Sql.IsNull объявлена как ServerSideOnly.
Если нам не помогут, то мы тоже никого не пощадим.