如果使用投影,则始终忽略
Categoires
.Where(c => c.ID == 18)
.Include("Products.ProductPrices")
.Select(c => new
{
ID = c.ID,
Name = c.Name, // other properties
ProductAndPrices = c.Products.ProductPrice,
// from above what I really want is Products + there prices
})
我在这里有一个概念上的问题,从上面的代码,
ProductAndPrices = c.Products.ProductPrice,
我能做到,
ProductAndPrices = c.Products,
但不是这个,
ProductAndPrices = c.Products.ProductPrice,
问题
使用linqpad,我可以看到我的查询正在工作,并拥有所有数据,直到Incude("Products.ProductPrices"(,但当我尝试创建一个匿名对象和平面时,它不允许我这样做。
请注意,产品可能有多种价格。
编辑
这对我有用,
ProductAndPrices = c.Products.SelectMany(p => p.ProductPrice),
但上面只列出了产品价格列表,根本不包括产品列,
我真正想要的是产品列+它的子项(即价格(
ProductPrice也是一个集合,它是一个产品的价格历史列表。
Include
。但您可以通过以下方式获取所需数据:
Categories
.Where(c => c.ID == 18)
.Include("Products.ProductPrices")
.Select(c => new
{
ID = c.ID,
Name = c.Name, // other properties
Products = c.Products
.Select(p => new
{
Product = p,
// Or maybe various Product properties
ProductPrices = p.ProductPrice
})
})
您可以这样选择价格:
ProductAndPrices = c.Products.Select(p => new { Product = p, Prices = p.ProductPrice })
Categories
.Where(c => c.ID == 18)
.Include("Products.ProductPrices").SelectMany(c=> p.Products.ProductPrices, (parent, child) =>
new { Product = parent, ProductAndPrices = child});