繁体   English   中英

如何在单个LINQ语句中查询多个DbSet

[英]How to query multiple DbSets in a single LINQ statement

我在使用EF时遇到了一些麻烦。 在此模型中,我希望获得名称与某个字符串匹配的所有产品的IEnumerable,以及名称ALSO与相同字符串匹配的订单内的产品的所有IEnumerable,所有这些都没有Product在结果IEnumerable中重复。

也就是说,查询将搜索相同的字符串,并将其与产品名称和订单名称都匹配,并返回匹配的产品。

谢谢

      public class Order
        {
            public Order()
            {             
                OrderDetailList= new  List<OrderDetail>();
            }

            public int Id { get; set; }
            public String orderName{ get; set; }            
            public ICollection<OrderDetail> OrderDetailList{ get; set; }    
        }

 public class OrderDetail 
    {

        public int Id { get; set; }        

        [ForeignKey("Product_Id")]
        public Turno Product { get; set; }
        public int Product_Id { get; set; }

        public int numberOfItems{ get; set; }

        [ForeignKey("Order_Id")]      
        public Order Order { get; set; }
        public int Order_Id { get; set; }
   }



 public class Product 
    {
        public Product()
        {         
            OrderDetail= new List<OrderDetail>();
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public string codId { get; set; }
        public ICollection<OrderDetail> OrderDetailList{ get; set; }
}



public class Context : DbContext
    {
        public Context()
            : base("Context") { }            
        public DbSet<Order> Orders { get; set; }
        public DbSet<OrderDetail> OrderDetails { get; set; }
        public DbSet<Product> Products { get; set; }
    }

这就是我对您要查询的内容的理解的方式:

var products = context.Products
    .Where(p =>
        p.Name == "searchString" ||
        p.OrderDetailList.Any(od => od.Order.orderName == "searchString"))
    .ToList();

像这样查询产品时使用Include

context.Product.Distinct().Include(o =>
OrderDetailList.Product.Where(p=>p.Name.Contains("string")).ToList();

我没有测试过该示例,因此您可能需要对其进行一些调整。 但是我猜到了。

暂无
暂无

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

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