Можно ли как-то проще?
От: MozgC США http://nightcoder.livejournal.com
Дата: 24.03.11 22:24
Оценка: 1 (1)
Есть таблицы
Suppliers { ID, Name, ... }
и
Custpercents { ID, CustomerID, SupplierID, Perc }

Все поля в этих таблицах NOT NULL.

Был такой запрос:

SELECT
  s.ID, s.Name, cp.Perc
FROM
  suppliers s 
    LEFT JOIN custpercents cp ON (cp.SupplierID = s.ID AND cp.CustomerID = ?CustomerID)
ORDER BY 
  s.Name

Соответственно если соответствующая строка в таблице custpercents не находилась, то вместо Perc возвращался null и именно это мне и надо было.

При переходе на linq я специально сделал чтобы генерировался именно LEFT JOIN, но вместо Perc оказывался не null, а 0 (член Perc объявлен как int).

Чтобы возвращался именно null, пришлось немного извратиться и написать такой запрос:

var q =
    from s in db.Suppliers
    join cp in db.Custpercents 
        on new { s.ID, CustomerID = (int)cbCustomers.SelectedValue } equals new { ID = cp.SupplierID, cp.CustomerID } into g
    from cp in g.DefaultIfEmpty() // to make left join
    orderby s.Name
    select new { s.ID, s.Name, Perc = Sql.AsSql((int?)cp.Perc) };

Можно ли как-то проще добиться цели?

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.