2011-03-31 75 views
2

我有以下代码:LINQ查询返回多个表

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 

有没有办法做到这一点?

回答

4

你想要做这样的事?

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

肯定有:

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

您可以定义(在各自的领域key)外键到表中,并为他们(通过LINQ到SQL设计理想情况下)添加协会模型clases。

然后,你可以这样做:

IQueryable<Table1> items1 = dc.Table1; 

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

的缺点与做这样的说法,就是,即使DataLoadOption S,L2S将使这个非常昂贵的。查询Table1结果集中每一行的Table2。