我不得不修改查询以添加额外的联接以引入分区名称。Linq 2 SQL加入/组包含计数
var c = from C in db.Campaigns
join L in db.Links on C.id equals L.campaignID into CL
from CL2 in CL.DefaultIfEmpty()
join D in db.Divisions on CL2.divisionID equals D.id into CLD
from CLD2 in CLD.DefaultIfEmpty()
where C.ClientID == user.ClientID
group CLD2 by new { C.id, C.Name, Division = CLD2.Name, C.created } into G
select new {
CampaignName = G.Key.Name,
Campaignid = G.Key.id,
Division = G.Key.Division ?? "-",
Created = G.Key.created,
Links = G.Count(b => b.Name != null) };
我与它遇到的问题是,该司名称为空的每一行,当链接计数为0(这不应该是)。
于是,我就写了使用lambda不同的方式:
var c = from CLD in ( from C in db.Campaigns from L in db.Links.Where(w => w.campaignID == C.id).DefaultIfEmpty() from D in db.Divisions.Where(w => w.id == C.DivisionID).DefaultIfEmpty() where C.ClientID == user.ClientID select new { CampaignName = C.Name, Campaignid = C.id, Division = D.Name, Created = C.created } ) group CLD by new { id = CLD.Campaignid, Name = CLD.CampaignName, Division = CLD.Division, created = CLD.Created } into G select new { CampaignName = G.Key.Name, Campaignid = G.Key.id, Division = G.Key.Division ?? "-", Created = G.Key.created, Links = G.Count(b => b.Campaignid != null) };
在此查询,该司的名称正确显示所有行,但是当链接的次数为0,查询将返回1代替。
我相信我在两种情况下都很接近,但似乎无法找到正确的语法。欢迎任何建议。很高兴为任一查询提供修复,但很想最终看到如何解决这两个问题。
谢谢大家。