【问题标题】:linq to EF, how to use 'top` methodlinq to EF,如何使用“top”方法
【发布时间】:2013-04-22 08:12:44
【问题描述】:

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

我知道我可以这样写:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

System.Data.Objects 用于实体框架而不是 LINQ to SQL,据我所知 - 但是要在 LINQ to SQL 甚至 LINQ to Objects 中找到前 N 个值,您通常只需使用 Take

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

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

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

【讨论】:

  • 我的错,我的意思是 linq to Entities。我知道这种语法。我专门询问了top 语法。我找到了答案:Top(1, new ObjectParameter("@CtidProdId")).Select(item => item.CtidProdId).SingleOrDefault()
  • @EladBenda:Jon 向您展示的是与 SQL 的 top 等效的 LINQ。
  • @EladBenda:您专门询问了 LINQ to SQL,然后您更改了问题。您还说您知道FirstOrDefault,这与知道Take 不同。如果您要问错误的问题,您应该期望得到不涵盖您想要的答案的答案。老实说,即使在实体框架中我也会使用Take,除非你真的需要使用Top。当您的问题含糊不清时,它真的无济于事。
【解决方案2】:

请看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&lt;T&gt;,请考虑使用 Take() 扩展名。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多