简体   繁体   English

如何在Entity Framework中为所有子项使用条件

[英]How to use condition for all children in Entity Framework

I have these classes: 我有这些课程:

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; }
}

And I have this list : 我有这个清单:

  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"}
                }
            }
                }
            }
        };

I want to select all stores where Name ="Lilo" and products names is "Dell " and Color="Blue". 我想选择Name =“Lilo”的所有商店,产品名称为“Dell”,Color =“Blue”。 I want do this in Entity Framework, not Linq. 我想在Entity Framework中这样做,而不是Linq。

I use this code but it doesn't work : 我使用此代码,但它不起作用:

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

How can I do this ? 我怎样才能做到这一点 ?

Do this By Method Syntax : 按方法语法执行此操作:

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

Updated : And Hopeless 's Answers is (best answers): 更新:和Hopeless的答案是(最佳答案):

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

And by Linq : 并由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();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM