如何同时循环两个列表并在c#中对其进行排序?

时间:2016-08-18 07:15:17

标签: c# linq loops foreach

我有两个已根据日期排序的列表。这两个列表是不同类型的。 但这两个列表都包含日期类型属性。

例如:列表A由员工组成,列表B由部门

组成

例如:

Sample List A:
  {
    { 
      id=1;
      Date=12/7/2016;
      some other data..
    },
    { 
      id=2;
      Date=13/5/2016;
      some other data..
    },
   }



 Sample List B:

  {
    { 
      id=1;
      Date=1/9/2016;
      some other data..
    },
    { 
      id=2;
      Date=19/6/2016;
      some other data..
    },
   }

我需要同时遍历这两个列表,以便根据日期属性对结果进行排序。

因此,如果最高日期值来自列表B,则调用函数从列表B打印该记录的详细信息。接下来从两个列表中查找下一个最高日期值,现在如果它来自列表A则调用函数从列表A打印该记录的详细信息。

1 个答案:

答案 0 :(得分:3)

您的问题很模糊,可能您正在寻找Concat: 让BaseAB成为基类,共享接口等,其中包含 至少Date属性

   List<ClassA> A = ...
   List<ClassB> B = ...

   var result A
     .Concat<BaseAB>(B)
     .OrderByDescending(item => item.Date);

   foreach (var item in result) {
     var itemA = item as A;

     if (itemA != null) {
       ... 
     }
     else {
       var itemB = item as B;  
       ...  
     } 
   }

在(丑陋)案例中AB共有 nothing ,您可以使用人工Tuple<DateTime, Object>表示:

var result = ListA
   .Select(item => new Tuple<DateTime, Object>(item.Date, item))
   .Concat(ListB
      .Select(item => new Tuple<DateTime, Object>(item.Date, item)))
   .OrderByDescending(tuple => tuple.Item1)
   .Select(tuple => tuple.Item2);