[英]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.