Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Linq join isnull  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Оптимизировали t-sql запрос, добавлен join вида:
inner join t_Person on personid = isnull([t1].[rf_personid], [t2].[rf_personid ])

Вопрос, как преобразовать к linq ?
21 янв 16, 10:37    [18709244]     Ответить | Цитировать Сообщить модератору
 Re: Linq join isnull  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
...
let id = t1.rf_personid ?? t2.rf_personid
join p in Db.t_Person on id equals p.personid
21 янв 16, 10:46    [18709290]     Ответить | Цитировать Сообщить модератору
 Re: Linq join isnull  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
Ругается на t1.rf_personid
Left operand of the '??' operator shoul be of reference or nullable type
Error 154 Operator '??' cannot be applied to operands of type 'int' and 'int'
21 янв 16, 10:51    [18709317]     Ответить | Цитировать Сообщить модератору
 Re: Linq join isnull  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21983
а что непонятно в сообщении об ошибке?
если у тебя поле t1.rf_personid типа int, то проверять его на null не нужно, потому что бессмысленно
21 янв 16, 11:16    [18709469]     Ответить | Цитировать Сообщить модератору
 Re: Linq join isnull  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
через join в итоге могут быть и null вот в чем весь секрет... поле то собственное тип int а джойном может данных не быть и будет null
21 янв 16, 11:20    [18709501]     Ответить | Цитировать Сообщить модератору
 Re: Linq join isnull  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21983
Алексей Кр
вот в чем весь секрет
причем тут join?
у тебя ошибка в первой строке
поле int НЕ МОЖЕТ НИКОГДА быть null и оператор ?? к нему неприменим
21 янв 16, 11:23    [18709534]     Ответить | Цитировать Сообщить модератору
 Re: Linq join isnull  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
повторюсь, как тогда сделать в linq работающий t-sql

Оптимизировали t-sql запрос, добавлен join вида:
inner join t_Person on personid = isnull([t1].[rf_personid], [t2].[rf_personid ])

Вопрос, как преобразовать к linq ?
21 янв 16, 11:25    [18709542]     Ответить | Цитировать Сообщить модератору
 Re: Linq join isnull  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21983
это значит, что ты ошибся где-то раньше - до join-а

ты объявил поле t1.rf_personid как int, а надо как int?
21 янв 16, 11:27    [18709560]     Ответить | Цитировать Сообщить модератору
 Re: Linq join isnull  [new]
Алексей Кр
Member

Откуда: Белгород
Сообщений: 458
как преобразовать t-sql в linq
21 янв 16, 11:29    [18709566]     Ответить | Цитировать Сообщить модератору
 Re: Linq join isnull  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13632
Алексей Кр
повторюсь, как тогда сделать в linq работающий t-sql

Оптимизировали t-sql запрос, добавлен join вида:
inner join t_Person on personid = isnull([t1].[rf_personid], [t2].[rf_personid ])

Вопрос, как преобразовать к linq ?
Ну там же написано, что поле rf_personid должно иметь тип int?, а не int как в твоём коде.
21 янв 16, 11:30    [18709574]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить