linq to sql 怎么查前5条记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linq to sql 怎么查前5条记录相关的知识,希望对你有一定的参考价值。

参考技术A linq method:
var users = Users.OrderBy(u=>u.UserName).Take(5);

linq expression我就不会了,呵呵。
参考技术B select top 5 * from 表 order by 列
要取前几行 一般要进行排序
当然 也可以不排
只要不是要求像取成绩前几名 或后几名就可以不排序本回答被提问者和网友采纳

LINQ to SQL。如何使用.take()选择所有记录

var result=(from refridgerators in context.A                                               
                                     group refridgerators by new { refridgerators.Id, refridgerators.Name } into gr
                                     select new DAO<String>
                                     {
                                         Key = gr.Key.Name,
                                         Count = gr.Count()
                                     }).OrderByDescending(k => k.Count).Take(numberOfRecords).ToList();

这是我的linq to sql查询,这是完全正常的。

如果我传递numberOfRecords = 5,则显示前5条记录(按其计数排序)。

现在我的问题是我不想修改查询。那么我应该在上面的查询中做什么来显示所有记录。这与我的要求有关我希望使用相同的查询来显示所有冰箱和前5名,前10名冰箱。

我不确定是否可以使用LINQ。但我想必须有一些与此相关的东西。

答案

由于Tim已经发布了正确的解决方案,我仍然希望您注意更简单的解决方案,如果符合您的要求。在此查询的顶部添加一个if条件。

if(allRecordRequired)
{
  numberOfRecords = 2000000;
}

保持您的查询不变。

另一答案

我只是不将Take添加到查询中,而是添加到使用此查询的代码中。

例如:

public static IEnumerable<DAO> GetRefrigerators()
{
    var query = from refridgerators in context.A                                               
                group refridgerators by new { refridgerators.Id, refridgerators.Name } into gr
                select new DAO<String>
                {
                     Key = gr.Key.Name,
                     Count = gr.Count()
                };
    return query.OrderByDescending(k => k.Count);
}

现在你可以使用:

var refrigerators = GetRefrigerators().Take(5).ToList();

要么

var refrigerators = GetRefrigerators().Take(10).ToList();

要么

var refrigerators = GetRefrigerators().ToList();
另一答案

我将numberOfRecords设为int?,如果值为null,则不应调用Take(numberOfRecords)

var result = (from refridgerators in context.A
              group refridgerators by new { refridgerators.Id, refridgerators.Name } into gr
              select new DAO<String>
              {
                 Key = gr.Key.Name,
                 Count = gr.Count()
              }).OrderByDescending(k => k.Count);

if(numberOfRecords.HasValue)
    result = result.Take(numberOfRecords.Value);

return result.ToList();

我知道它会稍微改变你的查询,但我相信这是非常可接受的,添加一个超高值的numberOfRecords会添加一个无意中听到的查询,这在你的情况下是没用的。

另一答案

将一个巨大的数字传递给你的方法。一个数字等于(至少)或大于项目数量。这应该给你所有的记录。

另一答案

所以这篇文章很老了,我知道,但是没有提供我的解决方案(可能有人希望在2年后实现同样的目标,比如我):

您可以创建自己的扩展方法,该方法也适用于linq 2 sql。例:

public static class LinqExtensions
{
    public static IEnumerable<TResult> TakeIfNotNull<TResult>(this IEnumerable<TResult> source, int? count)
    {
        return !count.HasValue ? source : source.Take(count.Value);
    } 
}

这需要一个int?而不是int并返回source-enumerable如果countnull否则它返回默认Take-method的结果。

所以你可以这样写:

.OrderByDescending(k => k.Count).TakeIfNotNull(numberOfRecords).ToList();

如果numberOfCounts为null,它将记录所有记录。

以上是关于linq to sql 怎么查前5条记录的主要内容,如果未能解决你的问题,请参考以下文章

使用 LINQ to SQL 批量插入和复制记录

Linq-to-SQL 数据检索速度比较

Linq to SQL用分隔符追加多个记录

如何删除 Linq to Entity 中的多条记录? [复制]

LINQ to SQL CompiledQuery 变慢

Linq-to-sql 使用 GroupBy 并返回满足条件的记录