在我的应用程序中,我有移动与类别相关联。 我想要一个最频繁的列表类别。按实体框架查询分组
我的对象是:
类别: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