我想在他們的串列中獲得最多的專案我想運行的 sql 查詢
select
i.Id,
count(*) as count
from Items
inner join ItemItemList il on i.Id = il.ItemsId
group by i.Id
order by count desc
物品物體
public class Item:BaseEntity
{
public string Name { get; set; }
public decimal Price { get; set; }
public decimal DiscountedPrice{ get; set; }
public virtual ICollection<ItemList> ItemLists { get; set; }
}
物品清單物體
public class ItemList:BaseEntity
{
public string Name { get; set; }
public string Description { get; set; }
public int UserId { get; set; }
public ICollection<Item> Items { get; set; }
[ForeignKey("UserId")]
public virtual User User { get; set; }
}
我的 DTO
public class TopItemsInLists
{
[BsonRepresentation(BsonType.ObjectId)]
[BsonId]
public string ItemId { get; set; }
public int Quantity { get; set; }
}
我的物品倉庫
var query = _context.Items.Include(l => l.ItemLists)
.GroupBy(g => g.ItemLists)
.Select(z => new TopItemsInLists { ItemId = z.Key.ToString(), Quantity = z.Count() })
.OrderByDescending(z => z.Quantity)
.Take(10);
我想獲得 ItemLists 中找到最多的專案。我哪里做錯了?如果有人有任何其他建議
uj5u.com熱心網友回復:
您必須按 Id 分組,而不是按集合屬性分組。就像在 SQL 中一樣。但在此之前,您必須將記錄乘以SelectMany.
var query = _context.Items
.SelectMany(i => i.ItemLists, (i, il) => i)
.GroupBy(i => i.Id)
.Select(g => new TopItemsInLists { ItemId = g.Key.ToString(), Quantity = g.Count() })
.OrderByDescending(z => z.Quantity)
.Take(10);
但我建議對這種更接近 SQL 的結構使用 Query 語法:
var query =
from i in _context.Items
from il in i.ItemLists
group i by i.Id into g
select new TopItemsInLists
{
ItemId = g.Key.ToString(),
Quantity = g.Count()
};
query = query
.OrderByDescending(z => z.Quantity)
.Take(10);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/341135.html
標籤:asp.net-mvc 林克 .net核心
上一篇:在SQLServer中使用CHARINDEX函式的問題
下一篇:我該如何解決這個錯誤?找不到型別或命名空間名稱“EditCourseLevel”(您是否缺少using指令或程式集參考?
