2013-05-14 4 views
0

У меня есть вложенный список следующего класса:Linq с critera для вложенного списка

public class ClassD 
{ 
    public DateTime EndDate { get; set; } 
    public List<StructKeyValuePair<string, string>> StructKeyValPairs { get; set; } 
} 

public class StructKeyValuePair<K, V> 
{ 
    public K Key { get; set; } 
    public V Value { get; set; } 
} 

У меня есть List<ClassD> resultList и нужно проверить, есть ли строка с этим условием в этом списке:

EnDate > today 
Key == "Key1" and Value != "Value1" 
Key == "Key2" and Value == "Value2" 

Мне нужно вернуть true или false в зависимости от того, соблюдены ли эти критерии. Есть ли простой способ сделать это, используя Linq в одной строке против использования вложенных циклов?

+1

@PieterGeerkens На самом деле он сделал это, если вы просмотрите историю изменений –

+2

Ум, почему вы не используете KeyValuePair, почему ваш проект действительно класс? –

+0

@ Gary.S: Как точно это делается? Я пробовал в прошлом и могу делать это только для своих собственных сообщений. –

ответ

3

Может быть что-то вроде этого, используя Linq Any:

bool condition = resultList.Any(row => 
    row.EndDate > DateTime.Today 
    && row.StructKeyValPairs.Any(kvp => kvp.K == "Key1" && kvp.V != "Value1") 
    && row.StructKeyValPairs.Any(kvp => kvp.K == "Key2" && kvp.V == "Value2") 
); 

Это возвращает истину, если есть строка со всеми (не уверен, если я угадала точно в логике):

  1. EndDate> сегодня
  2. любой КВП с "Key1", а не "Value1"
  3. любой КВП с "Key2" и "значение2"
Смежные вопросы