首页 > 解决方案 > IQueryable concat 导致订单被忽略

问题描述

我有两个订单IQueryable

var stickyMessages = GetStickyMessages(binUser, filterModel, messages);
var nonSticky = GetNonStickyMessages(binUser, messages);

我想做的是将它们合二为一IQueryable,保持两者的原始顺序不变。

问题是,如果我Concat这样使用,那么订单会以某种方式被忽略:

var messagesCombined = stickyMessages.Concat(stickyMessages);
return messagesCombined;

如果我简单地返回nonStickyor stickMessages,则保持顺序。我不知道为什么会这样。

标签: c#linq

解决方案


因为在连接两个可枚举之后,结果无论如何都不按顺序排列,这就是为什么大多数 IQueryable “翻译器”在连接之前忽略排序的原因。您必须在连接它们之后重新声明顺序。

另请参阅Order by 不适用于 LINQ 中的 Concat()


推荐阅读