C# LINQ加入/分组问题
所以我又被卡住了 我有三个表,我正试图加入并与linq分组;公司、通知和请求C# LINQ加入/分组问题,c#,sql,asp.net-mvc,linq,entity-framework,C#,Sql,Asp.net Mvc,Linq,Entity Framework,所以我又被卡住了 我有三个表,我正试图加入并与linq分组;公司、通知和请求 一家公司可以有很多通知 通知具有子类别ID和公司ID 请求具有子类别ID 我的目标是得到一个公司列表,每个公司都有一个他们注意到的子类别列表,每个注意到的子类别都有该子类别中的请求 Ex: x公司正在监控子类别4和7。 告诉他我们在这些子类别中有什么请求 我只为一家公司这么做。但当我需要多个公司的列表时,我无法解决分组和联接问题 Company company = db.Companies.Where(x=>
- 一家公司可以有很多通知
- 通知具有子类别ID和公司ID
- 请求具有子类别ID
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
谢谢你的帮助 更新:如果我理解正确,你想要这样的东西
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() }
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}
更新2对于您的sql,它看起来是这样的
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() }
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}
嗯,我正试图以此为基础,但它不起作用。Any()正在生成一个错误,如果我删除它,我将为每个公司和notice-subcategory获取一行。哇,非常感谢!如果我从gr中删除了.ToList(),它就起作用了。将account表与company表左键联接以将电子邮件与company name合并起来是否容易?现在在Key object中,您有company-因此您可以从中获取名称、电子邮件等是的,但电子邮件位于第四个表(account)中我想加入公司:)请看我上面更新的问题…我设法加入并将其分组到gr中,但将其作为一种魅力加入companyWorks会更有意义!谢谢你,格伦迪。