C# 如何在单个LINQ语句中查询多个数据库集
我在EF上遇到了一些麻烦。 在这个模型中,我希望得到名称与某个字符串匹配的所有产品的IEnumerable,以及名称与同一字符串匹配的订单中的产品,所有这些在生成的IEnumerable中都没有重复的产品 也就是说,查询将搜索同一字符串,并将其与产品名称和订单名称进行匹配,然后返回匹配的产品 谢谢C# 如何在单个LINQ语句中查询多个数据库集,c#,entity-framework,lambda,dbset,C#,Entity Framework,Lambda,Dbset,我在EF上遇到了一些麻烦。 在这个模型中,我希望得到名称与某个字符串匹配的所有产品的IEnumerable,以及名称与同一字符串匹配的订单中的产品,所有这些在生成的IEnumerable中都没有重复的产品 也就是说,查询将搜索同一字符串,并将其与产品名称和订单名称进行匹配,然后返回匹配的产品 谢谢 public class Order { public Order() {
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; }
}
公共类秩序
{
公共秩序()
{
OrderDetailList=新列表();
}
公共int Id{get;set;}
公共字符串orderName{get;set;}
公共ICollection OrderDetailList{get;set;}
}
公共类OrderDetail
{
公共int Id{get;set;}
[外键(“产品Id”)]
公共Turno乘积{get;set;}
公共int乘积_Id{get;set;}
public int numberOfItems{get;set;}
[外键(“订单Id”)]
公共秩序{get;set;}
公共整数顺序_Id{get;set;}
}
公共类产品
{
公共产品()
{
OrderDetail=新列表();
}
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串codId{get;set;}
公共ICollection OrderDetailList{get;set;}
}
公共类上下文:DbContext
{
公共上下文()
:base(“Context”){}
公共数据库集命令{get;set;}
公共DbSet OrderDetails{get;set;}
公共数据库集产品{get;set;}
}
像这样查询产品时使用包括
context.Product.Distinct().Include(o =>
OrderDetailList.Product.Where(p=>p.Name.Contains("string")).ToList();
我还没有测试过这个示例,所以您可能需要对它进行一些调整。但是你明白我的意思。这就是我如何理解你想要查询的内容的描述:
var products = context.Products
.Where(p =>
p.Name == "searchString" ||
p.OrderDetailList.Any(od => od.Order.orderName == "searchString"))
.ToList();
您的答案仅与订单中包含的产品名称匹配,但与订单中未包含的产品名称或订单名称均不匹配。