使用多个查询填充对象列表

时间:2011-04-04 00:32:12

标签: c# linq

我有一个使用合成构建的对象模型,看起来像这样:

MyModel{
  public int ModelID {get;set;}
  public List<OtherModel1> ListOfOtherModel {get;set;}
  public List<OtherModeln> ListOfOtherModels {get;set;}
  ...
}

我有一个返回ModelID列表的linq-to-sql查询,我将此集合作为输入参数传递给其他查询以填充OtherModels对象的列表;这些对象通过ModelID与MyModel相关。当这些查询结束时(我有9个查询),我最终得到10个列表。

我将这10个列表(ListOfMyModel和其他9个列表:ListOfOtherModel1,ListOfOtherModels ...)传递给另一个函数,该函数将通过循环ListOfMyModel并查询每个其他列表以查看是否构建MyModel集合它们包含具有相同ModelID的列表。

正如我正在做的那样,我只是想知道是否有更简单/更快/更好的方法来做到这一点。谢谢你的建议。

1 个答案:

答案 0 :(得分:0)

如果它们具有公共基类,则在执行查询之前,先转换集合,然后对每个集合执行联合。

例如,假设Derived1Derived2具有公共基类CommonBaseClass

 IEnumerable<CommonBaseClass> Merge(List<Derived1> derived1list, List<Dervived2> derived2list){
      return derived1list.Cast<CommonBaseClass>().Union(derived2list.Cast<CommonBaseClass>());
 }

因此,您可以合并所有列表,然后对大CommonBaseClass集合执行查询,而不是单独查询每个列表,然后加入它们。

我认为这是你要找的东西,但你的问题并不是非常清楚。如果您发布一些代码,它会更容易帮助您。

您似乎也在寻找SelectMany扩展方法,但我不确定,因为语言不清楚。