Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 修改linq以获得前5个元素_C#_Linq - Fatal编程技术网

C# 修改linq以获得前5个元素

C# 修改linq以获得前5个元素,c#,linq,C#,Linq,我需要得到前5个元素 我正在做这件事 var lastArticles = from a in be.MyTable where a.id == 1 join c in be.OtherTable on a.parent equals c.id orderby a.timestamp descending select new { a, cNam

我需要得到前5个元素

我正在做这件事

var lastArticles = from a in be.MyTable
                   where a.id == 1
                   join c in be.OtherTable on a.parent equals c.id
                   orderby a.timestamp descending
                   select new { a, cName = c.name};
但是在linq语句中有什么方法可以实现吗?

没有,您需要使用and作为方法调用。没有LINQ特定的等价物

.Take(5)
不,您需要使用和作为方法调用。没有LINQ特定的等价物

.Take(5)

linq查询应始终与运行该查询的产品分开

.Take()
生成结果,因此应该与查询分开

var lastArticles = (from a in be.MyTable
                    where a.id == 1
                    join c in be.OtherTable on a.parent equals c.id
                    orderby a.timestamp descending
                    select new { a, cName = c.name }).Take(5);

linq查询应始终与运行该查询的产品分开

.Take()
生成结果,因此应该与查询分开

var lastArticles = (from a in be.MyTable
                    where a.id == 1
                    join c in be.OtherTable on a.parent equals c.id
                    orderby a.timestamp descending
                    select new { a, cName = c.name }).Take(5);

这段代码只是合成糖,但通常会转换为LINQ方法链,其外观如下:

//data query
var lastArticlesQuery = from a in be.MyTable
                   where a.id == 1
                   join c in be.OtherTable on a.parent equals c.id
                   orderby a.timestamp descending
                   select new { a, cName = c.name};

//results of that query at this time
var lastArticles = lastArticlesQuery.Take(5);
因此,为
Take()
添加一个关键字只会增加sytractic sugar,而且还需要重新转换


简而言之,没有,唯一的方法是使用
Take()
方法。

此代码只是合成糖,但通常会转换为LINQ方法链,其外观类似:

//data query
var lastArticlesQuery = from a in be.MyTable
                   where a.id == 1
                   join c in be.OtherTable on a.parent equals c.id
                   orderby a.timestamp descending
                   select new { a, cName = c.name};

//results of that query at this time
var lastArticles = lastArticlesQuery.Take(5);
因此,为
Take()
添加一个关键字只会增加sytractic sugar,而且还需要重新转换



简言之,不,唯一的方法是使用
Take()
方法。

@AdrianIftode对
Skip()
有同样的想法。和+1,这是一种考虑LINQ数据访问的好方法。@AdrianIftode我没有看到问题中提到的
.Skip()
,但它是查询枚举的一部分,也应该与查询本身分开。@AdrianIftode绝对没有
Select
是一个委托,每次枚举运行一次以将其转换或“投影”为不同形状。它不枚举查询。@aswayer:
Take
也不枚举查询。您可能会将其与
ToList()
ToArray()
混淆?这实际上取决于上下文。如果Select用于IQueryable,那么您在某种程度上是对的,因为委托不用于将类型投影到另一个类型,而是用于知道要拾取哪些列。但是,如果Select用于IEnumerable,则是,it项目(它枚举和项目)。如果是IEnumerable,则每个扩展都使用迭代器,但如果是IQueryable,则行为取决于提供程序的实现。对于linq 2,sql Take方法不是“停止-直到这里有查询”方法,但ToList和AsEnumerable是。@AdrianIftode对于
Skip()
的想法是一样的。和+1,这是一种考虑LINQ数据访问的好方法。@AdrianIftode我没有看到问题中提到的
.Skip()
,但它是查询枚举的一部分,也应该与查询本身分开。@AdrianIftode绝对没有
Select
是一个委托,每次枚举运行一次以将其转换或“投影”为不同形状。它不枚举查询。@aswayer:
Take
也不枚举查询。您可能会将其与
ToList()
ToArray()
混淆?这实际上取决于上下文。如果Select用于IQueryable,那么您在某种程度上是对的,因为委托不用于将类型投影到另一个类型,而是用于知道要拾取哪些列。但是,如果Select用于IEnumerable,则是,it项目(它枚举和项目)。如果是IEnumerable,则每个扩展都使用迭代器,但如果是IQueryable,则行为取决于提供程序的实现。对于linq 2,sql Take方法不是“停止-直到查询出现”方法,但ToList和AsEnumerable是。我不喜欢这种方法,因为您总是被迫在查询周围放置
(…)
包装,这混淆了惰性可枚举查询和运行查询结果之间的区别。大多数情况下,如果我想立即运行查询,我会在方法调用中用两行代码将其抽象出来—1是查询,2是返回查询。取而代之的是someenumerationfunction()。@asawyer:
Take
是查询的一部分—没有“急切”的意思这正是我停止编写LINQ并直接使用扩展方法的原因。你很快就能熟练地使用圆点符号了。@哎呀,是的,今天早上我似乎需要更多的咖啡。我的意思是“迷惑”而不是放火。Woops.@asawyer我有指向
Skip()
Take()
Enumerable
版本的链接,但在上面的示例中,它实际上使用了
Queryable
实现。我不喜欢这样,因为您总是被迫在查询周围放置
(…)
包装,它融合了惰性可枚举查询和运行查询的结果之间的区别。大多数情况下,如果我想立即运行查询,我会在方法调用中用两行代码将其抽象出来—1是查询,2是返回查询。取而代之的是someenumerationfunction()。@asawyer:
Take
是查询的一部分—没有“急切”的意思这正是我停止编写LINQ并直接使用扩展方法的原因。你很快就能熟练地使用圆点符号了。@哎呀,是的,今天早上我似乎需要更多的咖啡。我的意思是“迷惑”而不是放火。Woops.@asawyer我有指向
Skip()
Take()
Enumerable版本的链接,但在上面的示例中,它实际上使用了
Queryable
实现。在从纯LINQ切换到扩展方法后,我发现它们更一致,更易于阅读。真的吗?我个人认为查询语法对于“复杂”的查询更具可读性,比如这个。LINQ和SQL一样,旨在可读,但imho最终提供了真正任意的语法。另一方面,扩展方法在传统的C#界中运行,这是大多数开发人员所熟悉的