IQueryable <t> .GroupBy()参考类型</t>

时间:2011-08-24 18:52:59

标签: c# linq-to-sql

使用Linq to SQL我正在编写利用IQueryable.GroupBy方法的查询。

即使我的查询涉及许多表,但左边连接也可以说明我们只使用两个表。 TableA与TableB有一对多的关系。

var queryResults = from db.TableA
       .Join(db.TableB, tA => tA.ID, tB => tB.TableA_ID, (ta, tb) => tb)
       .GroupBy(tb => tb.TableA);

这会给我一个

<IQueryable<IGrouping<TableA, TableB>>

从表面上看,这似乎有效,但是我很担心,因为我正在调用GroupBy方法并传入keySelector参数的引用类型。

请帮助我理解为什么这样做或不安全。

2 个答案:

答案 0 :(得分:0)

很难说你想要做什么,但我认为你可能想在这里使用理解语法,以便更容易编写/理解。特别是,在之后进行分组,你已经完成了你想要做的任何连接或其他操作,而不是将它们混合在一起。

var query = ... (can be chained methods, whatever)

var grouped = from row in query
              group row by row.SomeProperty;

然后,您可能会有更轻松的时间(我认为)编写和推理有关查询。

答案 1 :(得分:0)

试试这个:

var queryResults =
    from ta in db.TableA
    join tb in db.TableB on ta.ID equals tb.TableA_ID
    group tb by ta;

是的,这对引用类型是安全的。 linq-to-sql生成的查询与引用类型无关 - 它只是SQL。