C# 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=>

所以我又被卡住了

我有三个表,我正试图加入并与linq分组;公司、通知和请求

  • 一家公司可以有很多通知

  • 通知具有子类别ID和公司ID

  • 请求具有子类别ID

我的目标是得到一个公司列表,每个公司都有一个他们注意到的子类别列表,每个注意到的子类别都有该子类别中的请求

Ex: 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 

谢谢你的帮助

更新:如果我理解正确,你想要这样的东西

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会更有意义!谢谢你,格伦迪。