C# 代码查询.Take(()=>;1)做什么?
在维护一个项目C# 代码查询.Take(()=>;1)做什么?,c#,entity-framework,linq,C#,Entity Framework,Linq,在维护一个项目查询时,我遇到了以下代码 query属于IQueryable类型 传递lambda与传递int有什么不同 edit:编辑以澄清我不是在询问first或default代码编写者应该有该行的书面文档 但如果您使用MSFT文档: public static System.Linq.IQueryable获取(此System.Linq.IQueryable源, System.Linq.Expressions.Expression countAccessor); countAccessor
查询时,我遇到了以下代码
query
属于IQueryable
类型
传递lambda与传递int
有什么不同
edit:编辑以澄清我不是在询问first或default
代码编写者应该有该行的书面文档
但如果您使用MSFT文档:
public static System.Linq.IQueryable获取(此System.Linq.IQueryable源,
System.Linq.Expressions.Expression countAccessor);
countAccessor表达式
计算返回的元素数的表达式。这里有几点需要解释
query.Take(()=>1
()
这将返回一个可能包含单个项的IQueryable
。它将运行一个使用SQL ServerTOP
语法的查询,这意味着它将在SQL Server 2008及更早版本上工作
query.Take(1)
这与以前的版本类似,但它使用较新的SQL ServerOFFSET
/FETCH
语法,并且是首选方法,除非您需要旧版支持
query.FirstOrDefault()
这将返回实体的单个实例,如果没有匹配项,则返回null。如果需要单个项,则通常是首选方法。不过,您需要在代码中检查null
将返回一个可枚举的查询,而查询。FirstOrDefault
将为您提供一个项目,或null。它们将运行非常不同的@Sinatr请参见此处示例@DavidG该方法的文档不应该回答这个问题吗?如果是,它在哪里?@HimBromBeere不回答Take
和之间的差异e> FirstOrDefault
though@DavidG但是,它不应该提到Take(int)
和Take(Func)
之间的区别吗?否则,对于这个扩展,IMHO几乎没有什么用处。@Ergis这些文档属于一个扩展,所以它不是一个明显的查找位置(它不是一个标准的可查询扩展)当我认为答案是正确的时候,我在下面的答案中得到了a-1。是你吗?因为我真的为我的工作缺乏专业精神而沮丧here@Ergis不是我很抱歉,虽然有人也否决了这一点只是想知道,lambda不只是返回一个常量的用例是什么?@OlivierJacot Descombes返回一个常量?@DavidG()=>1
我指的是1
返回。从API的角度来看,我们只需调用。取(1)
public static System.Linq.IQueryable<TSource> Take<TSource> (this System.Linq.IQueryable<TSource> source,
System.Linq.Expressions.Expression<Func<int>> countAccessor);