C#LINQ - 将IEnumerable <string>与anonmyous列表进行比较?

时间:2015-12-21 20:26:27

标签: c# linq list generics ienumerable

基本问题:

我有:

  • IEnumerable listA。
  • var listB(这是由LINQ查询生成的不规则列表)

我想查询包含listA的对象列表,看它们是否与listB匹配:

  • someObjectList.Where(x =&gt; x.listA == listB)

比较不起作用 - 那么如何确保两个列表的类型相同才能进行比较?

详细问题:

我正在将一个较大的列表分组到一个包含名称和相关日期的子集中。

var listGroup = from n in list group n by new
   { n.NAME  } into d
   select new
   {
      NAME = d.Key.NAME, listOfDates = from x in d select new
                                     { Date = x.DATE } };

我有一个对象来保存值以便进一步处理:

class SomeObject
{
        public SomeObject()
        {
            _listOfDates = new List<DateTime>();
         }

     private IENumerable<DateTime> _listOfDates;
     public IENumerable<DateTime> ListOfDates
     {
           get {return _listOfDates;}
           set {_listOfDates = value;}
     }

 }

然后我遍历listGroup并添加到通用列表&lt;&gt; SomeObject:

foreach(var item in listGroup)
{
   SomeObject so = new SomeObject();
   ...do some stuff
   if(some match occurs then add into List<SomeObject>)

}

当我迭代然后我想检查匹配的现有List:

var record = someObjectList.Where(x => x.NAME == item.NAME && x.ListOfDates == item.listOfDates).SingleOrDefault();

问题是将 x.ListOfDates item.listOfDates 进行比较并不起作用。没有编译器错误,但我怀疑返回的值列表是不同的。如何让列表进行通用以便进行比较?

UPDATE1

这似乎可以使listOfDates变成类似的格式:

IENumberable<DateTime> tempList = item.listOfDates.Select(x => x.DATE).ToList()

然后我按照&#39; SequenceEqual&#39;来自@Matt Burland的建议

1 个答案:

答案 0 :(得分:1)

您只需将一个IEnumerable<DateTime>与另一个IEnumerable<DateTime>进行比较,就需要比较序列。幸运的是,Enumerable.SequenceEquals(在静态方法和扩展方法中都有)可以在这里工作。

类似于:

var record = someObjectList
    .Where(x => x.NAME == item.NAME &&  x.ListOfDates.SequenceEquals(item.listOfDates))
    .SingleOrDefault();