LINQ-запрос, возвращающий несколько таблиц - PullRequest
2 голосов
/ 31 марта 2011

У меня есть следующий код:

MyDataContext dc = new MyDataContext();

IQueryable<Table1> q1 =
       from n in dc.Table1
       select n

Я хочу присоединиться ко второй таблице, поэтому:

var qry = 
      from n in dc.Table1
      join r in dc.Table2 on n.Key equals r.Key
      select new { n, r };

Это возвращает типIQueryable<anonymous>.Что я сейчас хочу сделать, это извлечь Table1 и Table2.Например (это, очевидно, не работает):

IQueryable<Table1> q1 = qry.Table1
IQueryable<Table2> q2 = qry.Table2

Есть ли способ сделать это?

Ответы [ 3 ]

4 голосов
/ 31 марта 2011

Вы хотите сделать что-то подобное?

IQueryable<Table1> q1 = qry.Select(x => x.n);
IQueryable<Table2> q2 = qry.Select(x => x.r);
2 голосов
/ 31 марта 2011

Конечно, есть:

IQueryable<Table1> q1 = qry.Select(a => a.n);
IQueryable<Table2> q2 = qry.Select(a => a.r);
1 голос
/ 31 марта 2011

Вы можете определить внешние ключи для своих таблиц (в соответствующих полях key) и добавить ассоциации для них в предложения модели (в идеале через конструктор LINQ-to-SQL).

Тогда вы можете сделать:

IQueryable<Table1> items1 = dc.Table1;

foreach (var item1 in items1)
{
    var items2 = item1.Table2s; // naming might differ
}

Недостатком такого способа является то, что даже при DataLoadOption с L2S сделает это очень дорогим. Запрос Table2 для каждой строки в наборе результатов Table1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...