我有這個SQL查詢,正是我想要的,但我需要它在LINQ。它返回了幾個AVC行數多少PersonAVCPermission有鏈接到它的狀態1不計從linq的空值LEFT OUTER JOIN查詢
SELECT a.Id, a.Name, a.Address, COUNT(p.AVCID) AS Count
FROM AVC AS a
LEFT OUTER JOIN
(
SELECT PersonAVCPermission.AVCId
FROM PersonAVCPermission
WHERE PersonAVCPermission.Status = 1
) AS p
ON a.Id = p.AVCId
GROUP BY a.Id, a.Name, a.Address
我在LINQ此查詢和它在沒有PersonAVCPermission也應算做1
除了同樣的事情var yellows = odc.PersonAVCPermissions.Where(o => o.Status == (int)AVCStatus.Yellow);
var q = from a in odc.AVCs
from p in yellows.Where(o => o.AVCId == a.Id).DefaultIfEmpty()
group a by new { a.Id, a.Name, a.Address } into agroup
select new AVCListItem
{
Id = agroup.Key.Id,
Name = agroup.Key.Name,
Address = agroup.Key.Address,
Count = agroup.Count(o => o.Id != null)
};
即時猜測與DefaultIfEmpty()它把在隨後被計數,所以我嘗試使用排除它們在列表爲空行(O => o.Id!= NULL),但它仍然被一切,至少一個
如果我不使用DefaultIfEmpty()它跳過t他與計數0完全行
我如何排除他們或我做它完全錯誤?
哇,現在我覺得荒謬:P。謝謝 – Imapler