[英]Is there a possibility to take 100 records then other 100 record from database table using LinQ and Take()
[英]how to take 100 records from linq query based on a condition
我有一個查詢,它將給出結果集。 根據條件我想拍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);
因為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();
請注意,在ToList
之前執行Take
是很重要的,否則,它會檢索所有記錄,然后只保留前100個 - 只獲取所需的記錄會更有效,特別是如果它是一個查詢一個可能包含數十萬行的數據庫表。
SQL TOP
命令中最重要的概念之一是order by
。 您不應該在沒有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();
Take和Skip操作僅針對有序集合很好地定義。 更多信息
雖然其他用戶在為您提供您想要的結果時是正確的...
這不是您應該如何使用Entity Framework。
這是使用EF的更好方法。
var query = from student in Context.Students
where student.Id == 123
from topic in student.Topics
order by topic.Name
select topic;
請注意結構如何更緊密地遵循業務需求的邏輯。
你幾乎可以用英語閱讀代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.