2013-12-21 128 views
1

所以我再次卡住...LINQ加入/分組問題

我有三個表,我試圖加入並與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 

UPDATE

讓我重新整理我的問題。

此查詢產生表我要尋找的結果:

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'; 

但是,而不是產生一個平坦的列表,我想通過CompanyId轉化爲對LINQ也是這個組。所以每個公司只有一行代表,在該公司內我可以得到這些請求。

因此,而不是像這樣的列表:

CompanyId Name Email   SubcategoryId  FriendlyName 
1   Test [email protected] 2     x 
1   Test [email protected] 4     y 

我想有這樣的:

CompanyId Name Email   GroupOfRequests 
1   Test [email protected] contains two 

感謝任何幫助!

回答

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} 
+0

嗯,我想在此建但它不起作用。 gg.Any()會產生一個錯誤,如果我刪除它,我會得到每個公司的一行和notice-subcategory。 – Josef

+0

我已經更新了我的問題並提供了一些解釋 – Josef

+0

@Josef我正在更新我的答案,試試看 – Grundy