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

3

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

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

我有一个 Linq-to-SQL 查询,返回一个 ModelID 列表,我将这个集合作为输入参数传递给其他查询,以填充 OtherModels 对象的列表;这些对象通过 ModelID 与 MyModel 相关联。当这些查询结束时(我有 9 个查询),我最终得到了 10 个列表。
我将这 10 个列表(ListOfMyModel 和另外 9 个:ListOfOtherModel1、ListOfOtherModels...)传递给另一个函数,该函数通过循环遍历 ListOfMyModel 并查询每个其他列表,以查看它们是否包含具有相同 ModelID 的列表,来构建 MyModel 的集合。
在做所有这些的同时,我想知道是否有更简单/更快/更好的方法来完成它。感谢您的建议。

你是否考虑在List<OfModelN>的泛型类型上使用接口List<IModelN>,然后将所有结果注入到一个列表中?从你的示例中不清楚列表中的结果与模型之间的关联。 - Pepto
你能用一些代码展示一下它可能是什么样子吗? - frenchie
你所说的“查询其他列表以查看它们是否包含列表”是什么意思? - smartcaveman
1个回答

0
如果它们有一个共同的基类,您可以将集合转换,然后对每个集合执行联合操作,然后再执行查询。
例如,假设Derived1和Derived2具有共同的基类CommonBaseClass。
 IEnumerable<CommonBaseClass> Merge(List<Derived1> derived1list, List<Dervived2> derived2list){
      return derived1list.Cast<CommonBaseClass>().Union(derived2list.Cast<CommonBaseClass>());
 }

所以,您可以将所有列表合并,然后在大的CommonBaseClass集合上执行查询,而不是逐个查询然后将它们连接起来。

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

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


在这方面,Union<>()和Concat<>()有什么区别? - sehe
Union会删除重复项,而Concat则不会。https://dev59.com/F3M_5IYBdhLWcg3wiDuA - smartcaveman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接