在我的應用程序中,我有移動與類別相關聯。 我想要一個最頻繁的列表類別。按實體框架查詢分組
我的對象是:
類別:CATID,catName
運動:Movid,movDate,movMount,CATID
我認爲這將有一個提高它「Group By」查詢(通過catId分組並獲取更多內容) (使用c#中的實體框架6)
非常感謝!
在我的應用程序中,我有移動與類別相關聯。 我想要一個最頻繁的列表類別。按實體框架查詢分組
我的對象是:
類別:CATID,catName
運動:Movid,movDate,movMount,CATID
我認爲這將有一個提高它「Group By」查詢(通過catId分組並獲取更多內容) (使用c#中的實體框架6)
非常感謝!
我希望這會幫助:
var query = dbContext.Category.Select(u => new
{
Cat = u,
MovementCount = u.Movement.Count()
})
.ToList()
.OrderByDescending(u => u.MovementCount)
.Select(u => u.Cat)
.ToList();
完美無缺!我沒有意識到一件事:當FK(數據庫)從運動到類別 – Migue
按類別對運動進行分組並選擇catid和count。 將此結果與類別結合起來以獲得名稱,然後按count對結果進行降序排序。
var groupedCategories = context.Movements.GroupBy(m=>m.catId).Select(g=>new {CatId = g.Key, Count = g.Count()});
var frequentCategories = groupedCategories.Join(context.Categories, g => g.CatId, c => c.catId, (g,c) => new { catId = c.catId, catName = c.catName, count = g.Count }).OrderByDescending(r => r.Count);
foreach (var category in frequentCategories)
{
// category.catId, category.catName and category.Count
}
謝謝Raja !!,它幫助我很多! – Migue
你只需要在category
使用navigation property
簡單地說,你有一類導航屬性包含了所有與Movement
,我把它叫做Movements
在下面的查詢。你可以這樣寫你的查詢,最少與DB
聯繫。
class Cat
{
public Guid catId { get; set; }
public string catName { get; set; }
public IEnumerable<Movement> Movements { get; set; }
public int MovementsCount { get { return Movements.Count(); } }
}
var Categories = category.Select(u => new Cat()
{
u.catId,
u.catName,
Movements = u.Movements.AsEnumerable()
}).ToList();
var CategoriesIncludeCount = Categories.OrderBy(u => u.MovementsCount).ToList();
Thiks Amir !,我解決了具有排名方法的「經理」類中的問題。但你提出的很有趣。在類別類中發佈此查詢可能會有很大幫助!將結合您提供的上述解決方案。 – Migue
我不明白你想要什麼,但'tsql'是由我的linq查詢生成的,比你檢查過的答案要輕。在那個查詢中,你需要一個額外的'group by'和''base''中的'.Count()',但是在我的查詢中你沒有'group by'並且你從結果集中得到'Count'已經被獲取並在記憶中這樣做。而這,提高你的表現 –
,我有以下數據結構: 類別:CATID(PK),catNombre 運動:Movid(PK),movDescription,CATID,movQuantity 我需要的是更多的相關的類別列表動作。 嘗試您的解決方案,但我需要返回「類別」而不是「貓」的列表。 此外,當我將類別與動作聯繫起來? Movements
我解決了這個問題!
我使用了「Raja」解決方案(非常感謝!)。
返回由「Category」和「Count」組成的集合。我稍微改變它以返回一個類別列表。
var groupedCategories = model.Movement.GroupBy(m => m.catId).Select(
g => new {catId= g.Key, Count = g.Count() });
var freqCategories= groupedCategories.Join(model.Category,
g => g.catId,
c => c.catId,
(g, c) => new {category = c, count = g.Count}).OrderByDescending(ca => ca.count).Select(fc => fc.category).ToList();
重要:實體框架7(現更名爲實體框架的核心1.0)還不支持的GroupBy()的翻譯GROUP BY在生成的SQL。任何分組邏輯都將在客戶端運行,這可能會導致大量數據被加載。
https://blogs.msdn.microsoft.com/dotnet/2016/05/16/announcing-entity-framework-core-rc2
時,我不知道EF在「類別」類上生成屬性「運動」仍然不btw :-( –
這聽起來像你知道你需要什麼。當你嘗試使用GroupBy時,你有什麼問題? – Jonesopolis