Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Linq查找n个最流行的_Linq_Entity Framework - Fatal编程技术网

使用Linq查找n个最流行的

使用Linq查找n个最流行的,linq,entity-framework,Linq,Entity Framework,我应该如何构造Linq查询以返回数据库中最流行的标记的列表或Ienumerable(顺便说一下,我使用的是EF4.1) 目前我有: var tagsListing = db.Tags .GroupBy(q => q.Name) .OrderByDescending(gp => gp.Count())

我应该如何构造Linq查询以返回数据库中最流行的标记的列表或Ienumerable(顺便说一下,我使用的是EF4.1)

目前我有:

  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()不会是任意的。对不起,问题不清楚。我会编辑。