我有一个结合了联接和组的查询,但是我遇到了问题。查询就像:
var result = from p in Products join bp in BaseProducts on p.BaseProductId equals bp.Id group p by p.SomeId into pg select new ProductPriceMinMax { SomeId = pg.FirstOrDefault().SomeId, CountryCode = pg.FirstOrDefault().CountryCode, MinPrice = pg.Min(m => m.Price), MaxPrice = pg.Max(m => m.Price), BaseProductName = bp.Name <------ can't use bp. };
如您所见,它将Products表与BaseProducts表联接在一起,并在Product表的ID上分组。但是在生成的ProductPriceMinMax中,我还需要BaseProducts表的一个属性:bp.Name,但它不知道bp。
知道我在做什么错吗?
谢谢!
完成此操作后
group p by p.SomeId into pg
您将无法再访问初始值中使用的范围变量from。也就是说,您不能再谈论p或者bp,您只能谈论pg。
from
p
bp
pg
现在,pg是一个 组 ,因此包含 多个 产品。给定pg组中的所有产品都相同SomeId(因为这是您的分组依据),但是我不知道这是否意味着它们都相同BaseProductId。
SomeId
BaseProductId
要获得基本产品名称,您必须在pg组中选择一个特定产品(与SomeId和一样CountryCode), 然后 加入BaseProducts。
CountryCode
BaseProducts
var result = from p in Products group p by p.SomeId into pg // join *after* group join bp in BaseProducts on pg.FirstOrDefault().BaseProductId equals bp.Id select new ProductPriceMinMax { SomeId = pg.FirstOrDefault().SomeId, CountryCode = pg.FirstOrDefault().CountryCode, MinPrice = pg.Min(m => m.Price), MaxPrice = pg.Max(m => m.Price), BaseProductName = bp.Name // now there is a 'bp' in scope };
也就是说,这看起来很不寻常,我认为您应该退后一步,考虑一下您实际尝试检索的内容。