2015-12-21 72 views
1

的基本問題:C#LINQ - 比較IEnumerable <string>與匿名列表?

我:

  • IEnumerable的listA的。
  • VAR數組listB(這是由LINQ查詢生成的anonmyous列表)

我要查詢包含listA的對象列表,看看它們是否匹配到數組listB:

  • someObjectList。其中(x => x.listA == listB)

比較不起作用 - 那麼如何確保兩個列表是相同類型的比較?

具體問題:

我分組更大的名單到包含名稱和相關的日期(S)的一個子集。

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不起作用。沒有編譯器錯誤,但我懷疑返回的值列表是不同的。如何讓列表通用以便可以進行比較?

UPDATE1

這似乎是工作,以獲得listOfDates成類似的格式:

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

然後我跟着從@馬特Burland的「SequenceEqual的建議,

回答

1

你可以將一個IEnumerable<DateTime>與另一個IEnumerable<DateTime>相比較,您需要比較的序列。幸運的是,這裏有Enumerable.SequenceEquals(靜態和擴展方法)。

因此,像:

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

我試過,但得到這個錯誤:無法從 'System.Collections.Generic.IEnumerable ' 轉換爲「System.Linq.ParallelQuery