我正在经历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; }
}
答案 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();
我没有测试过这个例子,所以你可能需要稍微调整一下。但是你得到了我的想法。