Есть таблицы
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) };
Можно ли как-то проще добиться цели?
Спасибо.