如何在单个 LINQ 语句中查询多个数据库集

本文关键字:查询 数据库 语句 单个 LINQ | 更新日期: 2023-09-27 18:35:43

我在使用 EF 时遇到了一些麻烦。在这个模型中,我想获得名称与某个字符串匹配的所有产品的 IEnumerable,以及名称也与同一字符串匹配的订单中的产品,所有这些都在生成的 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; }
    }

如何在单个 LINQ 语句中查询多个数据库集

这是我理解您要查询的内容的描述的方式:

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

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