2015-09-21 5 views
1

У меня есть эти классы:Как использовать условие для всех детей в Entity Framework

public class product 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public Store Store { get; set; } 

    public ICollection<Color> Colors { get; set; } 
} 

public class Color 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public product Product { get; set; } 
} 

public class Store 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string City { get; set; } 

    public ICollection<product> Products { get; set; } 
} 

И у меня есть этот список:

List<Store> Stores = new List<Store> 
     { 
      new Store { Id = 1, Name = "Lilo", City = "Teh", 
         Products = new List<product> 
          { 
          new product 
           { Id = 1, Title = "Asus", 
            Colors = new List<Color> { 
             new Color { Id = 1, Name = "Blue"}, 
             new Color { Id = 2, Name = "Orange"} 
            } 
           }, 
          new product 
           { Id = 2, Title = "Dell", 
            Colors = new List<Color> { 
             new Color { Id = 1, Name = "Yellow"}, 
             new Color { Id = 2, Name = "Orange"}, 
             new Color { Id = 3, Name = "Red"} 
            } 
           } 
       } 
      }, 
      new Store{Id=2,Name="filo",City="san", 
       Products=new List<product> 
       { 
        new product{Id=3,Title="Asus", 
       Colors=new List<Color>{ 
        new Color{Id=1,Name="Blue"}, 
        new Color{Id=2,Name="Orange"} 
       } 
      }, 
      new product{Id=4,Title="Dell", 
       Colors=new List<Color>{ 
        new Color{Id=1,Name="Yellow"}, 
        new Color{Id=2,Name="Lime"}, 
        new Color{Id=3,Name="Red"} 
       } 
      } 
       } 
      } 
     }; 

Я хочу, чтобы выбрать все магазины, где Name = «Лило» и названия продуктов - «Dell» и Color = «Blue». Я хочу сделать это в Entity Framework, а не Linq.

Я использую этот код, но он не работает:

var test = Stores.Where(s => s.Name = "lilo" && s.Products.Where(p => p.Title == "Dell").FirstOrDefault().Title == "Dell" && s.Products.Where(c => c.Colors.Where(ct => ct.Name == "Blue").FirstOrDefault().Name = "Blue")).ToList(); 

Как я могу это сделать?

+0

Что делать вы имеете в виду 'by Entity Framework'? вы подразумеваете использование 'Entity SQL'? LinqToEntity является наиболее подходящим инструментом (избегайте подверженности ошибкам) ​​и чаще всего используется в EF, не уверен, почему вы не хотите использовать LINQ (ваш код даже использует LINQ - используется ли он для выражения того, что вы хотите?) – Hopeless

+1

Вы хотите все Магазины, так что из ваших данных, то, что вы хотите, должно быть выражено так: Все магазины, имеющие *** любые *** продукты под названием «Dell», и эти продукты должны иметь по крайней мере один цвет с «голубым». Таким образом, запрос может выглядеть следующим образом: 'Stores.Where (s => s.Name ==" lilo "&& s.Products.Any (p => p.Title ==" Dell "&& p.Colors.Any (c = > c.Color.Name == «Синий»))). ToList() ' – Hopeless

+0

Я хочу синтаксис LinqToEntity по методу. –

ответ

2

ли этот метод Синтаксис:

var stlist = Stores.Where(s => s.Name.ToLower() == "lilo" && s.Products.Where(p => p.Colors.Any(c=>c.Name=="Blue") && p.Title == "Dell").FirstOrDefault().Title == "Dell").ToList(); 

Обновлено: И ответы Hopeless «s есть (лучшие ответы):

var lslist2= Stores.Where(s => s.Name == "lilo" && s.Products.Any(p => p.Title == "Dell" && p.Colors.Any(c => c.Color.Name == "Blue"))).ToList(); 

И по Linq:

var test = (from s in Stores 
        from p in s.Products 
        from c in p.Colors 
        where s.Name=="Lilo" && p.Title=="Dell"&& c.Name=="Blue" 
        select s 
        ).ToList(); 
+0

попробуйте добавить версию синтаксиса метода, он хочет синтаксис метода, у вас есть принятый ответ в ближайшее время. – Hopeless

+0

@Hopeless Ваше право, ok Измените его на Синтаксис метода или Удалите мой ответ. –

+0

измените его на синтаксис метода и сообщите ему об ответе, вопрос должен иметь принятый ответ. Также запрос в моем комментарии был подтвержден как работающий, поэтому вы можете использовать тот же запрос в своем ответе :) (трудно быть другим) – Hopeless

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