linq到EF,如何使用'top '方法

本文关键字:top 方法 何使用 EF linq | 更新日期: 2023-09-27 18:10:28

我想使用linq to Entities将top记录按降序列Value1排序。

我知道我可以这样写:

MyCollection。orderbydescent (item => item. value1).FirstOrDefault();

但是如何使用下面的方法Top呢?

System.Data.Objects.ObjectQuery。Top(string, params System.Data.Objects.ObjectParameter[])

linq到EF,如何使用'top '方法

编辑:这个答案是在问题特别是关于LINQ to SQL时写的。

System.Data.Objects用于实体框架,而不是LINQ到SQL,据我所知-但要找到LINQ到SQL或甚至LINQ到对象的前N个值,你通常只使用Take:

var query = db.Customers
              .OrderByDescending(c => c.Value1)
              .Take(10);

(我真的鼓励您尝试使用比Value1更有意义的名称…)

编辑:即使在实体框架中,我通常在LINQ查询中使用Take -这是表示前N个结果的"LINQ方式"。如果您真的,真的想使用Top,文档提供了示例—但是您应该考虑为什么您想使用Top而不是Take。(你没有给我们任何上下文)

请查看MSDN的示例http://msdn.microsoft.com/en-GB/library/bb155995.aspx

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    string queryString =
        @"SELECT VALUE product FROM AdventureWorksEntities.Products AS product";
    ObjectQuery<Product> productQuery1 =
        new ObjectQuery<Product>(queryString, context, MergeOption.NoTracking);
    ObjectQuery<Product> productQuery2 = productQuery1.Top("2");
    // Iterate through the collection of Product items. 
    foreach (Product result in productQuery2)
        Console.WriteLine("{0}", result.Name);
}

或者如果您只有List<T>,请考虑使用Take()扩展。

List<string> strs = new List<strs>() { "1", "2", "3", "4" };
var firstTwo = strs.Take(2);