LinQ + методы внутри селекта...
От: Alexys Россия  
Дата: 21.04.15 09:32
Оценка:
Подскажите оптимально решение в следующей задаче:
имеем линQ выражение
var list = (from t in table
select new Record
{
pole1 = t.pole1,
pole2 = t.pole2,
poleResult = Calculate(t.date1, t.date2)
}
Функцию/метод внутри LinQ ставить нельзя, как обойти?
Неужто после получения массива снова нужно в цикле проходить и вычислять значение дополнительного поля ?
Re: LinQ + методы внутри селекта...
От: Mihas  
Дата: 21.04.15 09:45
Оценка:
Здравствуйте, Alexys, Вы писали:

A>Функцию/метод внутри LinQ ставить нельзя

Да ну? Правда чтоли? Попробую после обеда.
Правда, я пишу LINQ-выражения в функциональном виде. Может быть, в этом причина?
Re: LinQ + методы внутри селекта...
От: Nikolay_Ch Россия  
Дата: 21.04.15 09:50
Оценка:
Здравствуйте, Alexys, Вы писали:

A>Функцию/метод внутри LinQ ставить нельзя, как обойти?

Может все таки не в обычном LINQ, а в Entity Framework?
Re[2]: LinQ + методы внутри селекта...
От: Alexys Россия  
Дата: 21.04.15 10:17
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали:

N_C>Здравствуйте, Alexys, Вы писали:


A>>Функцию/метод внутри LinQ ставить нельзя, как обойти?

N_C>Может все таки не в обычном LINQ, а в Entity Framework?

да в ентити
Re: LinQ + методы внутри селекта...
От: ZloeBablo Германия  
Дата: 21.04.15 10:23
Оценка: +2
Проблема в том что твой Calculate не может быть преобразован в эквивалент SQL.
Re[2]: LinQ + методы внутри селекта...
От: Nikolay_Ch Россия  
Дата: 21.04.15 10:34
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Да ну? Правда чтоли? Попробую после обеда.

Попробуйте... Сделайте LINQ-запрос с собственной функцией в EF...

M>Правда, я пишу LINQ-выражения в функциональном виде. Может быть, в этом причина?

Нет, не в этом.
Re[3]: LinQ + методы внутри селекта...
От: B7_Ruslan  
Дата: 21.04.15 10:34
Оценка:
Здравствуйте, 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();
Re[2]: LinQ + методы внутри селекта...
От: Danchik Украина  
Дата: 21.04.15 12:12
Оценка:
Здравствуйте, ZloeBablo, Вы писали:

ZB>Проблема в том что твой Calculate не может быть преобразован в эквивалент SQL.


Зато вполне может быть вызван на клиентской части. Может EF7 умеет?
Re: LinQ + методы внутри селекта...
От: Слава  
Дата: 21.04.15 16:24
Оценка:
Здравствуйте, Alexys, Вы писали:

A>Подскажите оптимально решение в следующей задаче:


Во-первых, можно выбрать все на клиент и там уже применить функцию.
Во-вторых, можно определить эту функцию в базе и сделать расширение к EF, которое будет вызывать эту функцию.

http://stackoverflow.com/questions/9842545/how-to-execute-a-scalar-user-defined-function-in-ef
https://msdn.microsoft.com/en-us/library/dd456847%28VS.100%29.aspx

То же самое можно сделать и в linq2db.
Re[2]: LinQ + методы внутри селекта...
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 22.04.15 19:13
Оценка:
Здравствуйте, Слава, Вы писали:

С>То же самое можно сделать и в linq2db.


В linq2db вполне возможно что вообще делать ничего не придется, он простые ситуации должен сам распознавать.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: LinQ + методы внутри селекта...
От: IT Россия blogs.rsdn.ru
Дата: 22.04.15 20:20
Оценка: 6 (1)
Здравствуйте, AndrewVK, Вы писали:

AVK>В linq2db вполне возможно что вообще делать ничего не придется, он простые ситуации должен сам распознавать.


С подобным проблем не будет. В финальном Select, если это не Union и не Distinct можно использовать любой клиентский код, кроме случаев использования принудительно генерируемых SQL выражений. Например:

...
select Sql.IsNull(MyMethod(f.Fields), 0)


где Sql.IsNull объявлена как ServerSideOnly.
//rsdn.org/forum/images/bis.gif Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.