LINQ查询返回多个表

时间:2011-03-31 16:15:16

标签: c# linq linq-to-sql

我有以下代码:

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 个答案:

答案 0 :(得分:4)

你想做这样的事情吗?

IQueryable<Table1> q1 = qry.Select(x => x.n);
IQueryable<Table2> q2 = qry.Select(x => x.r);

答案 1 :(得分:2)

当然有:

IQueryable<Table1> q1 = qry.Select(a => a.n);
IQueryable<Table2> q2 = qry.Select(a => a.r);

答案 2 :(得分:1)

您可以定义表的外键(在相应的key字段上),并将它们的关联添加到模型分支(理想情况下通过LINQ-to-SQL设计器)。

然后你可以这样做:

IQueryable<Table1> items1 = dc.Table1;

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

这样做的缺点是,即使使用DataLoadOption s,L2S也会使这非常昂贵。查询Table2结果集中的每一行。