使用Linq查找n个最流行的
我应该如何构造Linq查询以返回数据库中最流行的标记的列表或Ienumerable(顺便说一下,我使用的是EF4.1) 目前我有:使用Linq查找n个最流行的,linq,entity-framework,Linq,Entity Framework,我应该如何构造Linq查询以返回数据库中最流行的标记的列表或Ienumerable(顺便说一下,我使用的是EF4.1) 目前我有: var tagsListing = db.Tags .GroupBy(q => q.Name) .OrderByDescending(gp => gp.Count())
var tagsListing = db.Tags
.GroupBy(q => q.Name)
.OrderByDescending(gp => gp.Count())
.Take(5)
.Select();
我想我是其中的一部分,但我不确定如何构造Select语句…您的
Select
调用可能如下所示:
.Select(gp => gp.Key)
.Select(gp => gp.Key);
这将为您提供最常用标记的
IEnumerable
(假设Name
是string
)。您的Select
调用可能如下所示:
.Select(gp => gp.Key)
.Select(gp => gp.Key);
这将为您提供最常用标记的
IEnumerable
(假设Name
是string
)。您可能希望选择如下名称:
.Select(gp => gp.Key)
.Select(gp => gp.Key);
您可能希望选择如下名称:
.Select(gp => gp.Key)
.Select(gp => gp.Key);
假设您需要名称和计数,只需:
.Select(g => new { Name = g.Key, Count = g.Count() });
编辑:如果还需要完整的标记,可以使用:
这将为您提供一系列标记组,它们在一个组中具有相同的名称。或者您可能只需要每个组中的第一个标记,例如
.Select(g => g.First())
不清楚标签由什么组成,也不清楚您想要在结果中显示什么。假设您想要名称和计数,只需:
.Select(g => new { Name = g.Key, Count = g.Count() });
编辑:如果还需要完整的标记,可以使用:
这将为您提供一系列标记组,它们在一个组中具有相同的名称。或者您可能只需要每个组中的第一个标记,例如
.Select(g => g.First())
不清楚标记由什么组成,也不清楚您想要在结果中得到什么。您已经编写了一个完全可行的查询,不需要调用
。选择
IQueryable<IGrouping<string, Tag>> tagsListing = db.Tags
.GroupBy(q => q.Name)
.OrderByDescending(gp => gp.Count())
.Take(5);
List<IGrouping<string, Tag>> results = tagListing.ToList();
IQueryable标记列表=db.Tags
.GroupBy(q=>q.Name)
.OrderByDescending(gp=>gp.Count())
.采取(5);
List results=tagListing.ToList();
您已经编写了一个完全可行的查询,不需要调用。选择
IQueryable<IGrouping<string, Tag>> tagsListing = db.Tags
.GroupBy(q => q.Name)
.OrderByDescending(gp => gp.Count())
.Take(5);
List<IGrouping<string, Tag>> results = tagListing.ToList();
IQueryable标记列表=db.Tags
.GroupBy(q=>q.Name)
.OrderByDescending(gp=>gp.Count())
.采取(5);
List results=tagListing.ToList();
如果我不想返回匿名类型,而是返回实际的标记,那该怎么办?这看起来只是选择字符串,而不是整个标记对象。它正在返回一个IQueryable,理想情况下我想返回Ienumerable。@Judo:已编辑。。。请记住,您正在使用相同的名称对多个标记进行分组-您是否愿意只获取每个名称中的第一个(可能是任意的)标记?谢谢,.Select(g=>g.first())工作正常,因为它返回了最常用的标记的前x个名称。标记实际上是与项目的多对多关系的一部分,因此Name属性将被重复,因此返回First()不会是任意的。对不起,问题不清楚。我将进行编辑。如果我不想返回匿名类型,而是返回实际的标记,怎么样?这看起来只是选择字符串,而不是整个标记对象。它正在返回一个IQueryable,理想情况下我想返回Ienumerable。@Judo:已编辑。。。请记住,您正在使用相同的名称对多个标记进行分组-您是否愿意只获取每个名称中的第一个(可能是任意的)标记?谢谢,.Select(g=>g.first())工作正常,因为它返回了最常用的标记的前x个名称。标记实际上是与项目的多对多关系的一部分,因此Name属性将被重复,因此返回First()不会是任意的。对不起,问题不清楚。我会编辑。