我有一个使用合成构建的对象模型,看起来像这样:
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的列表。
正如我正在做的那样,我只是想知道是否有更简单/更快/更好的方法来做到这一点。谢谢你的建议。
答案 0 :(得分:0)
如果它们具有公共基类,则在执行查询之前,先转换集合,然后对每个集合执行联合。
例如,假设Derived1
和Derived2
具有公共基类CommonBaseClass
IEnumerable<CommonBaseClass> Merge(List<Derived1> derived1list, List<Dervived2> derived2list){
return derived1list.Cast<CommonBaseClass>().Union(derived2list.Cast<CommonBaseClass>());
}
因此,您可以合并所有列表,然后对大CommonBaseClass
集合执行查询,而不是单独查询每个列表,然后加入它们。
我认为这是你要找的东西,但你的问题并不是非常清楚。如果您发布一些代码,它会更容易帮助您。
您似乎也在寻找SelectMany
扩展方法,但我不确定,因为语言不清楚。