所以我再次陷入困境......
我正在尝试加入三个表并与linq组合;公司,通知和要求。
公司可以发出许多通知。
通知具有SubcategoryId和CompanyId
请求具有SubcategoryId。
我的目标是获取公司列表,并为每个公司获取他们注意到的子类别的列表,并为每个注意到的子类别列出该子类别中的请求
实施例 公司x正在监控子类别4和7。 告诉他我们在这些子代码中有什么要求。
这就是我只为一家公司做的事情。但是当我需要一个包含多家公司的列表时,我无法解决分组和加入问题。
Company company = db.Companies.Where(x=>x.UserId == 10).FirstOrDefault();
var requestByNotices =
from notice in company.Notices
join request in db.Requests.Where(z => z.IsApproved &
z.Status.Status == "Active") on notice.SubcategoryId equals
request.Subcategoryid
更新
让我重新解释一下我的问题。
此查询正在生成一个包含我正在寻找的结果的表:
SELECT Companies.CompanyId, Companies.Name, Account.Email, Notices.SubcategoryId, Requests.FriendlyName FROM Companies
INNER JOIN Notices ON Companies.CompanyId = Notices.CompanyId
INNER JOIN Account ON Account.UserId = Companies.Uid
INNER JOIN Requests ON Notices.SubcategoryId = Requests.Subcategoryid
WHERE Requests.StartDate > '2013-12-22';
但是我不想生成一个平面列表,而是将其转换为linq,但也将其转换为CompanyId。因此,每家公司仅由一行代表,在该公司内我可以获得请求。
所以不是这样的列表:
CompanyId Name Email SubcategoryId FriendlyName
1 Test test@test.com 2 x
1 Test test@test.com 4 y
我想这样:
CompanyId Name Email GroupOfRequests
1 Test test@test.com contains two
感谢任何帮助!
答案 0 :(得分:1)
更新:如果我理解你想要这样的东西
var result =
from company in db.Companies
from notice in company.Notices
join request in db.Requests.Where(z => z.IsApproved &&
z.Status.Status == "Active") on notice.SubcategoryId equals request.Subcategoryid
group new {notice, request } by company into gr
select new {gr.Key, Value = gr.ToList() }
<强> UPDATE2 强>
你的SQL似乎是这样的
from company in db.Companies
join notice in db.Notices on company.CompanyId equals notice.CompanyId
join account in db.Account on company.Uid equals account.UserId
join request in db.Requests on notice.SubcategoryId equals request.SubcategoryId
group new {notice, request} by new {company, account} into g
select new {g.Key, value = g}