我有一个查询,它将给出结果集.根据条件我想拍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)
因为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个 - 仅获取所需记录的效率更高,特别是如果它是对数据库的查询可能包含数十万行的表.
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操作仅针对有序集合很好地定义. 更多信息