Показать нулевые результаты через левое соединение с Linq

1

У меня SQL-запрос:

SELECT A.Codplano, A.Secao, A.Setor,A.Subsetor,A.Contato, ISNULL(B.Subord,'NÃO
LANÇADA')AS Situacao 
FROM vwPLANODIN A LEFT JOIN LANCADA B
ON A.Codplano = B.Subord
and B.Data = '2014-06-10'
WHERE B.ID IS NULL and A.Sitio = 7341

Написано в Linq:

    var cob = from A in dataClass.vwPLANODINs
                  join B in dataClass.LANCADAs on new { A.Codplano, Data = data }
                  equals new { Codplano = B.Subord, Data = Convert.ToString(B.Data) }  into B_join
                  from B in B_join.DefaultIfEmpty()
                  where
                       B.Data == null &&
                       A.Sitio == local
                  select new
                  {
                      A.Codplano,
                      A.Secao,
                      A.Setor,
                      A.Subsetor,
                      A.Contato,
                      Situacao = (B.Subord ?? "N/A")
                  };    

Мне нужно показать данные Gridview, которые не были записаны, SQL-запрос возвращает то, что мне нужно, но запрос Linq возвращает полную противоположность.

Теги:
linq
left-join
isnull

1 ответ

0

Я бы не использовал outer join для этого, но запрос, который разрешает его, not exists:

var cob = from A in dataClass.vwPLANODINs
          where !(from B in dataClass.LANCADAs 
                  where B.Subord == A.Codplano && B.Data == data
                  select B)
                .Any()
             && A.Sitio == local
          select new
          {
              A.Codplano,
              A.Secao,
              A.Setor,
              A.Subsetor,
              A.Contato,
              Situacao = (B.Subord ?? "N/A")
          };  

Ещё вопросы

Сообщество Overcoder
Наверх
Меню