我有这样的模型
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();