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 Россия linq2db.com
Дата: 22.04.15 20:20
Оценка: 6 (1)
Здравствуйте, AndrewVK, Вы писали:

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


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

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


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