匿名类型选择对象及其子对象

  • 本文关键字:对象 选择 类型 c# linq
  • 更新时间 :
  • 英文 :

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});

相关内容

  • 没有找到相关文章