合并两个只有 return 结果不同的 LINQ 查询
Combining two LINQ queries that only their return result is different
我有一个查询,它连接到几个表,例如 TableA
、TableB
、TableC
和 TableD
,最后我说 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;
我有一个查询,它连接到几个表,例如 TableA
、TableB
、TableC
和 TableD
,最后我说 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;