2012-05-01 5 views
0

Я видел несколько примеров того, как сравнивать в Linq с помощью оператора Except и сравнения, но все они, казалось, показывали, как это делается с помощью двух простых типов или одного простого типа и одного комплекса. У меня есть два списка разных типов, мне нужно выбрать результат на основе дочернего свойства, а затем выбрать другую группу, в которой свойства соответствуют, а DateTime - новее. Может ли кто-нибудь помочь мне в этом?Сравнение LINQ между двумя типами списка дочерних объектов?

 public class Parent 
     { 
      public List<Child> ChildList; 
     } 

     public class Child 
     { 
      public string FoodChoice; 
      public DateTime FoodPick; 
     } 


     public class Food 
     { 
      public string FoodName; 
      public DateTime FoodPick; 
     } 

     public void FoodStuff 
    { 
     var parent = new Parent(); 
    var childList = new List<Child>(); 
childList.Add(new Child {FoodChoice="a",DateTime=..... 
childList.Add(new Child {FoodChoice="b",DateTime=..... 
childList.Add(new Child {FoodChoice="c",DateTime=..... 
parent.ChildList = childList; 
     var foodList = new List<Food>(); 
     foodList.Add...... 
     var childrenWithNoMatchingFoodChoices = from ufu in Parent.ChildList where !Parent.ChildList.Contains (foodList.FoodName) 
     var childrenWithMatchingFoodChoicesButWithNewerFoodPick = from foo in Parent.ChildList where Parent.ChildList.FoodPick > foodList.FoodPick 
    } 

Я пытаюсь выяснить, как получить List<Child> для childrenWithNoMatchingFoodChoices. Я пытаюсь выяснить, как получить List<Child> для childrenWithMatchingFoodChoicesButWithNewerFoodPick

Помощь? Использование .NET Framework 4.0.

Спасибо.

+0

foodList содержит последовательность и не может предоставить свойство FoodPick, например, экземпляр. Вы должны указать, какой из них вы хотите сравнить. –

+0

Я не уверен, о чем вы просите. Вместо этого типа C# -кода с ручным управлением вы можете написать REAL C#, который действительно компилируется. Затем добавьте несколько утверждений или что-то еще, чтобы мы могли точно увидеть, что сделает ваш код работать. В принципе, напишите нам единичный тест, а затем мы попытаемся его пропустить. Это «.....» заставляет нас (по крайней мере, меня) угадать, что вы пытаетесь сделать. – aquinas

ответ

1

Чтобы получить список детей, где FoodChoice находится не на foodList Я хотел бы использовать этот запрос:

var childrenNoMatch = parent.ChildList 
       .Where(ch => !foodList.Any(f => f.FoodName == ch.FoodChoice)); 

Тогда я хотел бы попробовать что-то вдоль этих линий:

var childrenMatch = parent.ChildList.Except(childrenNoMatch); 

    //childrenWithMatchingFoodChoicesButWithNewerFoodPick 
    var moreRecent = from ch in childrenMatch 
      let food = foodList.First(f => f.FoodName == ch.FoodChoice) 
      where DateTime.Compare(ch.FoodPick, food.FoodPick) == 1 
      select ch 

Это не тестируемых хотя ,

+0

После обновлений он должен теперь скомпилироваться - я сначала смутился между всеми продуктами питания в классах. –

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