2016-03-30 7 views
0

У меня есть структуру таблицы как следующийLINQ Регистрация с Группировать

Table_A 

Id  Description 

1   A 
2   B 
3   C 
4   D 

Table_B 

Table_A_Id Id Description 

    1   1  A 
    1   2  B 
    2   3  C 
    2   4  D 
    3   5  E 
    3   6  F 
    4   7  G 
    4   8  H 
    4   9  I 
    4   10  J 

Я хочу присоединиться к ним таким образом, чтобы получить список из следующих класса

Public Resultset 
{ 
    public Table_A table_a {get;set;} 
    public List<Table_B> table_b {get;set;} 
} 

// Предположим, у нас есть классы для TABLE_A и TABLE_B в соответствии с их определением таблицы

После моя попытка

var filter [] = {1,3,5}; 

var query = from a in context.Table_A 
      joins b in context.Table_B 
      on a.Id equals b.Table_A_id 
      where filter.Contains(b.Id) 
      // Need something here perhaps to group it to get desired results 
      Select new ResultSet() 
      { 
       // what to do here 
      } 

ответ

2

Вы можете попробовать следующую группу по:

var query = from a in context.Table_A 
      joins b in context.Table_B 
      on a.Id equals b.Table_A_id 
      where filter.Contains(b.Id) 
      group new{A=a, B=b } by a.Id into g 
      select new ResultSet() 
      { 
       table_a=g.FirstOrDefault().A, 
       table_b=g.Select(e=>e.B).ToList() 
      }; 

Другой способ, если вы использовали navigation properties между этими объектами:

var query = from b in context.Table_B 
      where filter.Contains(b.Id) 
      group b by b.Table_A_id into g 
      select new ResultSet() 
      { 
       table_a=g.FirstOrDefault().A, 
       table_b=g.ToList() 
      }; 
+0

где filter.Contains (b.Id) не будет работать после использования в bs. Что нужно передать методу Содержит? – InTheWorldOfCodingApplications

+0

oh Я получил его, позвольте мне уточнить свой ответ – octavioccl

+0

Я думаю, что где предложение не работает. Не имеет никакого эффекта. Я хочу только те таблицы Table_A, которые верны для фильтра – InTheWorldOfCodingApplications

1

Я думаю, что нужно просто Group Join:

var filter = new [] { 1, 3, 5 }; 

var query = from a in context.Table_A 
      join b in (from b in context.Table_B where filter.Contains(b.Id) select b) 
      on a.Id equals b.Table_A_id into items_B 
      select new ResultSet 
      { 
       table_a = a, 
       table_b = items_B.ToList() 
      }; 
+0

Привет @IvanStoev, я предложил то же самое решение сначала (проверьте мое второе редактирование), но OP сказал мне, что это не сработало (проверьте его второй комментарий в моем решении). У меня были сомнения, которые не получили ожидаемого результата, но он сказал, что получает таблицы Table_A, которые не соответствуют ожидаемому результату. Так я предложил новое решение, используя группу. Но теперь, когда я увидел ваше решение, я не понимаю, почему он сказал, что это не сработало. – octavioccl

+0

@octavioccl Привет, спасибо за информацию. И никаких проблем, я тоже не верю в это, но ведь это проблема OP, а не наша :) Привет. –

+0

Это правда;). В любом случае у вас есть мой голос, это, безусловно, лучшее решение;) – octavioccl

Смежные вопросы