使用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参数的引用类型。
请帮助我理解为什么这样做或不安全。
答案 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。