我想使用linq to Entities将top
记录按降序列Value1
排序。
我知道我写得像:
MyCollection.OrderByDescending(item => item.Value1).FirstOrDefault();
但是如何使用以下方法Top
?
System.Data.Objects.ObjectQuery.Top(string,params System.Data.Objects.ObjectParameter [])
答案 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方式”。如果您确实想要使用Take
,documentation会提供示例 - 但您应该考虑为什么要使用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);