Linq - “保存” OrderBy 操作 (c#)
假设我有 C# 中某种类型的通用列表 L
。然后,使用 linq 对其调用 OrderBy()
,并传入 lambda 表达式。
如果我随后重新分配L
,则之前的订单操作显然会丢失。
在重新分配列表之前,有什么方法可以“保存”我在列表中使用的 lambda 表达式并重新应用它吗?
Assume I have generic list L
of some type in c#. Then, using linq, call OrderBy()
on it, passing in a lambda expression.
If I then re-assign the L
, the previous order operation will obviously be lost.
Is there any way I can 'save' the lambda expression I used on the list before i reassigned it, and re-apply it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 Func delegate 存储您的订单,然后将其传递给 OrderBy 方法:
作为另一个示例,考虑一个
Person
类:现在您想要保留按
Name
属性排序的排序顺序。在这种情况下,Func
对Person
类型 (T
) 进行操作,并且TResult
将是一个字符串,因为 < code>Name 是一个字符串,也是您排序的依据。编辑:如果您需要
List
调用之后添加OrderBy
调用,请务必在 OrderByToList()
。 T>,因为 LINQ 方法将返回IEnumerable
。Use a Func delegate to store your ordering then pass that to the OrderBy method:
As another example consider a
Person
class:Now you want to preserve a sort order that sorts by the
Name
property. In this case theFunc
operates on aPerson
type (T
) and theTResult
will be a string sinceName
is a string and is what you are sorting by.EDIT: be sure to add
ToList()
after theOrderBy
calls if you need aList<T>
since the LINQ methods will return anIEnumerable<T>
.在
IEnumerable
上调用ToList()
或ToArray()
将导致立即对其求值。然后,您可以分配结果列表或数组来“保存”您的有序列表。Calling
ToList()
orToArray()
on yourIEnumerable<T>
will cause it to be immediately evaluated. You can then assign the resulting list or array to "save" your ordered list.