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

时间:2013-10-16 17:49:00

标签: c# entity-framework lambda dbset

我正在经历EF的一些麻烦。 在这个模型中,我想获得一个IEnumerable,它的名称与某个字符串相匹配的所有产品,以及名称ALSO匹配相同字符串的Order中的Products,所有这些都在产生的IEnumerable中没有Product duplicates。

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

由于

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

2 个答案:

答案 0 :(得分:1)

这就是我理解你想要查询的内容的描述:

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

答案 1 :(得分:0)

在查询产品时使用Include

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

我没有测试过这个例子,所以你可能需要稍微调整一下。但是你得到了我的想法。