簡體   English   中英

如何根據條件從linq查詢中獲取100條記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM