如何根据条件从linq查询中获取100条记录

poc*_*poc 5 c# linq

我有一个查询,它将给出结果集.根据条件我想拍100条记录.这意味着.我有一个变量x,如果x的值是100那么我必须做.take(100)否则我需要得到完整的记录.

var abc=(from st in Context.STopics 
where  st.IsActive==true && st.StudentID == 123 
select new result()
{
 name = st.name }).ToList().Take(100);
Run Code Online (Sandbox Code Playgroud)

Kei*_*all 8

因为LINQ返回一个延迟执行的IQueryable,所以您可以创建查询,然后在条件为真时将其限制为前100条记录,然后获取结果.这样,如果您的条件是假的,您将获得所有结果.

var abc = (from st in Context.STopics 
where st.IsActive && st.StudentID == 123 
select new result
{
 name = st.name
});
if (x == 100)
  abc = abc.Take(100);
abc = abc.ToList();
Run Code Online (Sandbox Code Playgroud)

请注意,Take之前执行此操作非常重要ToList,否则,它将检索所有记录,然后仅保留前100个 - 仅获取所需记录的效率更高,特别是如果它是对数据库的查询可能包含数十万行的表.


Kos*_*a W 6

SQL TOP命令中最重要的概念之一是order by.你不应该使用TOP,order by因为它可能会在不同的情况下返回不同的结果.

同样的概念也适用于linq.

 var results = Context.STopics.Where(st => st.IsActive && st.StudentID == 123)
              .Select(st => new result(){name = st.name})
              .OrderBy(r => r.name)                 
              .Take(100).ToList();
Run Code Online (Sandbox Code Playgroud)

Take和Skip操作仅针对有序集合很好地定义. 更多信息