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

时间:2013-04-22 08:12:45

标签: c# sql linq entity-framework linq-to-entities

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

我知道我写得像:

MyCollection.OrderByDescending(item => item.Value1).FirstOrDefault();

但是如何使用以下方法Top

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

2 个答案:

答案 0 :(得分:5)

编辑:当问题专门关于LINQ to SQL时,就写了这个答案。

据我所知,

System.Data.Objects用于实体框架而不是LINQ to SQL - 但要在LINQ to SQL或LINQ to Objects中找到前N个值,通常只使用{ {1}}:

Take

(我真的鼓励你尝试使用比var query = db.Customers .OrderByDescending(c => c.Value1) .Take(10); 更有意义的名字,但是......)

编辑:即使在实体框架中,我通常在LINQ查询中使用Value1 - 它是表示前N个结果的“LINQ方式”。如果您确实想要使用Takedocumentation会提供示例 - 但您应该考虑为什么要使用Top而不是Top }。 (你没有给我们任何背景。)

答案 1 :(得分:1)

请查看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);