【问题标题】:C# LINQ - Comparing a IEnumerable<string> against an anonmyous list?C# LINQ - 将 IEnumerable<string> 与匿名列表进行比较?
【发布时间】:2015-12-21 20:26:26
【问题描述】:

基本问题:

我有:

  • IEnumerable listA.
  • var listB(这是一个由 LINQ 查询生成的匿名列表)

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

  • someObjectList.Where(x => 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 并添加到 SomeObject 的通用列表:

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

}

当我遍历时,我想检查现有列表是否匹配:

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

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

更新1

这似乎可以将 listOfDates 转换为类似的格式:

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

然后我遵循了@Matt Burland 的“SequenceEqual”建议

【问题讨论】:

    标签: c# linq list generics ienumerable


    【解决方案1】:

    您可以将一个IEnumerable&lt;DateTime&gt; 与另一个IEnumerable&lt;DateTime&gt; 进行比较,您需要比较序列。幸运的是,Enumerable.SequenceEquals(静态和扩展方法风格)应该在这里工作。

    比如:

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

    【讨论】:

    • 我试过了,但得到了这个错误:无法从 'System.Collections.Generic.IEnumerable' 转换为 'System.Linq.ParallelQuery'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    相关资源
    最近更新 更多