2015-12-21 1 views
1

Основной вопрос:C# LINQ - Сравнение IEnumerable <string> с анонимным списком?

У меня есть:

  • IEnumerable lišta.
  • вар LISTB (это anonmyous список генерируется запрос LINQ)

Я хочу запросить список объектов, которые содержат lišta, чтобы увидеть, если они совпадают с LISTB:

  • someObjectList. Где (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>) 

} 

as i iterate through then, я хочу проверить существующий список для совпадений:

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() 

Тогда я последовал за '' SequenceEqual предложения от Берланда @ Matt

ответ

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 ' –

 Смежные вопросы

  • Нет связанных вопросов^_^