Linq-to-Entities Агрегировать столбец, который вычисляется во внешней функции - PullRequest
3 голосов
/ 22 февраля 2011

Я хочу получить сумму вычисляемого столбца Red, который вычисляется в функции IsRed (), которая возвращает целое число.

Когда я запускаю запрос, я получаю следующую ошибку: Метод 'Int32 IsRed (Int32)'не поддерживается перевод на SQL.

Как мне переписать это, чтобы заставить его работать. Спасибо.

From xx In 
    (From l In L3s
    Join a In BLs On l.L3ID Equals a.L3ID
    Order By l.ID
    Select PID = l.ID,
    Red = IsRed(a.D1.Day- l.D2.Day))
    Group By Key = xx.PID Into G = Sum(xx.Red)
    Select Key, G

Function IsRed(ByVal dayx As Integer) As Integer
    If (dayx < -7) Then
          Return 1
       Else
          Return 0
       End If
End Function

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Это потому, что LINQ to Entities не может понять, как преобразовать функцию IsRed в SQL. Вы можете создать собственную функцию SQL и привязать ее к своей функции IsRed, но, честно говоря, проще всего будет просто вставить свой код:

From xx In 
(From l In L3s
Join a In BLs On l.L3ID Equals a.L3ID
Order By l.ID
Select PID = l.ID,
Red = If(a.D1.Day - l.D2.Day < -7, 1, 0))
Group By Key = xx.PID Into G = Sum(xx.Red)
Select Key, G
2 голосов
/ 22 февраля 2011

Это сообщение говорит вам о том, что LINQ-to-Entities не знает, как перевести вызов вашей пользовательской функции в SQL (ну, технически, в entity -SQL, но это не так). соответствующее различие здесь).

Вы не сможете этого сделать. Каркас выражений не обеспечивает семантическое преобразование любой произвольной функции в SQL (что, во всяком случае, невозможно, поскольку SQL не является процедурным языком с полным лечением). Если вы хотите сделать это, вам придется встроить эту логику непосредственно в ваш запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...