从一个实体的导航属性字段创建一个int列表



我有这样的模型

public class Product 
{
public long Id{ get; set; }
public string Name { get; set; }
public virtual ICollection<ProductTags> ProductTags { get; set; }
}
public class ProductTags 
{
public long Id{ get; set; }
public virtual Product Product { get; set; }
public long ProductId { get; set; }
public virtual Tag Tag { get; set; }
public long TagId { get; set; }
}
public class Cart:BaseEntity
{
public long Id{ get; set; }
public virtual User User { get; set; } 
public long? UserId { get; set; }
public ICollection<CartItem> CartItems { get; set; }
}

public class CartItem
{
public long Id{ get; set; }
public virtual  Product Product { get; set; }
public long ProductId { get; set; }
public int Count { get; set; }
public virtual Cart Cart { get; set; }
public long CartId { get; set; }
}

我想拥有一个cartId中所有产品的所有TagId列表

CartItems 
==========================
Id     cartId        ProductId    Count      
------------------------------------------
1       1              1          10   
2       1              2          20
3       2              1          40
ProductTags 
==========================
Id     ProductId    TagId    
---------------------------
1        1            1
2        1            2
3        2            1
4        2            3
5        3            4

我希望结果是这样的List List ="1,2,3">

所以我做了这个

list = _context.CartItems
.Where(p => p.CartId == cartId)
.Include(p => p.Product)
.ThenInclude(p => p.ProductTags)
.SelectMany(p => p.Product.ProductTags)
.Select(p => p.TagId).ToList();

但它返回0,我的错误在哪里?

这是一个很难的问题,如果我不测试你的表,但你可以尝试这样的东西。结果将是给定cartId

的任意CartItem的所有tagid的列表的列表。
var list = _context.CartItems
.Include(x => x.Product)
.ThenInclude(x => x.ProductTags)
.Where(x => x.CartId == cartId)
.Select(x => new
{
List = x.Product
.ProductTags
.Select(x => x.TagId)
.ToList(),
})
.ToList();

最新更新