我有以下课程设计。对于批发商对象的实体框架,生成的linq上的where子句不正确。
public class Product
{
public int ID {get;set;}
public string Description {get;set;}
public Brand Brand {get;set;}
}
public class Brand
{
public int ID {get;set;}
public string Description {get;set;}
public Business Supplier {get;set;}
public IList<WholesalerBrand> WholesalerBrand {get;set;}
}
public class Business
{
public int ID {get;set;}
public string Name{get;set;}
public string Address {get;set;}
}
public class WholesalerBrand
{
public int ID {get;set;}
public int Brand_Id {get;set;}
public int Buisness_Id {get;set;}
public Brand Brand {get;set;}
public Business Wholesaler {get;set}
}
所以业务逻辑是:产品属于品牌。品牌属于供应商(属于商业对象),品牌可以有多个批发商。这种关系在WholesalerBrand类中描述。
在实体框架中,可查询对象看起来像这样。
IQueryable<Product> query = context.Product.Include(b => b.Brand).Include(s => s.Brand.Business).Include(wb => wb.Brand.WholesalerBrand).Include(w => w.Brand.WholesalerBrand.Select(i => i.Business));
现在可以像这样查询供应商信息:
query = query.Where(s => s.Brand.Business.Name.Contains(name)); ---- the generated linq has the Where on correct object.
但是在此查询中应用于错误级别的业务对象的位置:
query = query.Where(w => w.Brand.WholesalerBrand.Any(b => b.Wholesaler.Name.Contains(name))); --- thus giving wrong set of rows.
如何在此方案中查询批发商业务。这里出了什么问题?请帮忙。
如果有人需要,我可以分享生成的linq。
[更新] 用户需要从网页搜索供应商和/或批发商信息。应用程序正在使用实体框架,我正在使用的查询如上所示。批发商是通过映射类WholesalerBrand定义的。搜索上下文实体是产品。当我通过此查询查询批发商时
query = query.Where(w => w.Brand.WholesalerBrand.Any(b => b.Wholesaler.Name.Contains(name)));
where子句应用于错误的级别对象。因此,搜索结果是错误的。所以我需要一种通过Entity Framework查询批发商信息的方法。