2013-12-21 3 views
1

Итак, я снова застрял ...LINQ Join/Grouping issues

У меня есть три таблицы, которые я пытаюсь объединить и группировать с помощью linq; Компания, уведомления и запросы.

  • У компании может быть много уведомлений.

  • Уведомление имеют SubcategoryId и CompanyID

  • Запрос иметь SubcategoryId.

Моя цель здесь, чтобы получить список компаний, так и для каждой компании получить список своих замеченных подкатегорий и каждый заметил Подкатегория запросов в пределах этой подкатегории

Ex: Компания х является мониторинг подкатегорий 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'; 

Но вместо того, чтобы генерировать плоский список, я хотел бы перевести это в LINQ, но и группе CompanyID. Поэтому каждая компания представлена ​​только одной строкой, и внутри этой компании я могу получить запросы.

Так вместо списка, как это:

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() генерирует ошибку, и если я удалю ее, я получаю одну строку для каждой компании и подкатегорию извещения. – Josef

+0

Я обновил свой вопрос с некоторым уточнением – Josef

+0

@Josef Я обновляю свой ответ, попробуйте его посмотреть – Grundy