linq to entity where子句复杂连接(内部对象)

时间:2018-02-15 16:49:29

标签: c# entity-framework

我有以下课程设计。对于批发商对象的实体框架,生成的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查询批发商信息的方法。

0 个答案:

没有答案