合并两个只有 return 结果不同的 LINQ 查询

Combining two LINQ queries that only their return result is different

我有一个查询,它连接到几个表,例如 TableATableBTableCTableD,最后我说 select tableA 使用它返回的 tableA roecrds。 后来我有另一个查询,它的 tables, joins and where clause 与第一个查询完全相同,但唯一的区别是最后我说的是 select tableB

所以我的问题是我能否将这些组合在一起,这样我就不必 运行 查询两次?

        var query1 = (from ta in this.Context.TableA
                          join tb in this.Context.TableB on ta.Id equals tb.Id
                          join tc in blah
                          join td in blah
                          join te in blah
                          join tf in blah
                          join tg in blah
                          where (someConditionIsTrueOk)
                          select tg).ToList();


        var query2 = (from ta in this.Context.TableA
                          join tb in this.Context.TableB on ta.Id equals tb.Id
                          join tc in blah
                          join td in blah
                          join te in blah
                          join tf in blah
                          join tg in blah
                          where (someConditionIsTrueOk)
                          select te).ToList();   

创建一个 class,其中包含一个 tg、一个 te 等等。

那么只查询一次:

var listOfThings = (from ta in this.Context.TableA
                          join tb in this.Context.TableB on ta.Id equals tb.Id
                          join tc in blah
                          join td in blah
                          join te in blah
                          join tf in blah
                          join tg in blah
                          where (someConditionIsTrueOk)
                          select new YourNewClass { Tg = tg, Te = te, and so on }).ToList();   

或者正如 Grant 所说,如果不需要结构,可以 select 一个匿名对象:

var query = (from ta in this.Context.TableA
             join tb in this.Context.TableB on ta.Id equals tb.Id
             ...
             ...
             where (someConditionIsTrueOk)
             select new {tg, te}).ToList();

您可以 select 多个 table 或 table 中的列,并将它们组合成一个匿名 class,然后在-飞:

var result = (from ta in this.Context.TableA
              join tb in this.Context.TableB on ta.Id equals tb.Id
              ...
              ...
              where (someConditionIsTrueOk)
              select new {ta, tb}).ToList();

var firstTableA = result[0].ta;
var firstTableB = result[0].tb;