如何在查询语法中写入 Take(1)?

27

在 LINQ 查询语法中,是否可以编写 IQueryable<MyObject> = query.Take(1) 或类似的代码。 我正在使用 C# 5 和 EF 5。


1
很遗憾,C#没有像VB那样许多内置的Linq关键词,但您可以通过在结尾处添加“.Skip(n).Take(m)”来实现,而不会使代码看起来太混乱。 - Dai
@TimSchmelter 噢,太酷了。不过,VB.NET的语法是什么? - Steven Wexler
Take 实现了查询,应该将其与逻辑查询分开。 - asawyer
2
@Steaks:从查询结果r中取前2个(跳过工作方式类似) - Tim Schmelter
除了Take外,VB还添加了Distinct、Aggregate、Count、Sum等关键字。 - Jim Wooley
查询关键字 - 这可能很有帮助。 - Bakudan
2个回答

28

C#中的LINQ查询表达式语法中不存在与Take相当的方法。唯一存在查询表达式等效的方法是

Where,
Select,
SelectMany,
Join,
GroupJoin,
OrderBy,
OrderByDescending,
ThenBy,
ThenByDescending,
GroupBy,
Cast

这来自规范的 §7.16.2 部分。


3
我不知道原来有一个 Enumerable.GroupJoin 方法! - Steven Wexler

23

不行,你必须使用点语法来进行该操作。对于 ToListCount 等操作也是一样的。

var query =
    (from item in list
     where predicate(item)
     select func(item))
    .Take(10);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接