IQueryable. groupby()查询引用类型

本文关键字:查询 引用类型 groupby IQueryable | 更新日期: 2023-09-27 18:06:29

使用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参数的引用类型。

请告诉我为什么这样做是安全的

IQueryable<T>. groupby()查询引用类型

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

var query = ... (can be chained methods, whatever)
var grouped = from row in query
              group row by row.SomeProperty;

那么你可能会有一个更容易的时间(我认为)编写和推理的查询

试试这个:

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。