【发布时间】:2019-12-19 23:46:13
【问题描述】:
我正在使用 IQueryable 接口设置 CreateFilteredQuery。我必须返回一个 IQueryable 值,但我通过 OrderBy 函数获得了 IOrderedQueryable。有没有办法将该订单的所有合理数据(不是订单格式和那些不必要的数据)复制到 IQueryable 中?
我几乎尝试了所有方法。我无法更改返回值,因为这些函数也适用于另一个“过滤器”。
我正在尝试对最初是字符串列但填充了数字的列进行排序,因此我必须先解析为 Int,然后再解析为 orderby。 (如果我不这样做,如果我订购结果将是:1 2 20 22 3 而不是 1 2 3 20 22)
我用base.CreateFilteredQuery(input) 创建了“tareas”,并尝试在解析为 int 之前按 externalId 排序
if (input.Sorting == "externalId asc")
{
var tareasOrdenadas = (tareas.ToList()).OrderBy(t => int.Parse(t.ExternalId));
return tareasOrdenadas;
}
我期望System.Data.Entity.DbSet 或IQueryable 的输出。直到现在我有System.Linq.OrdenedEnumerable 或者只是IOrderedEnumerable
PD:当我在其他过滤器中修改“tareas”时,我有一个“System.Linq.IQueryable 类型的 System.Data.Entity.Infrastructure.DbQuery 值”
我需要一个 IQueryable 类型,而不是 IOrderedEnumerable,AsQueryable() 不起作用
PD2:谢谢大家的帮助。很抱歉没有回复,我几天不在办公室。我会尽你所能,谢谢大家。
快乐编码
【问题讨论】:
-
我不明白你的问题。请edit 并包括minimal reproducible example。
-
此代码将从内存中
tareas后面的表中读取所有内容,并尝试在本地对其进行排序。你为什么不只使用tareas.OrderBy(t->t.ExtenralId)呢?如果ExternalId是一个字符串而不是一个数字,那么这是一个需要修复的错误。01和1因为数字相同,而 字符串 完全不同 -
是否有原因 ExternalId 不是数据库模式中的 int 类型?如果可以解析所有 ExternalId,请在架构级别解决问题,然后在 EF 模型中解决问题,然后您就不必执行 ToList() 或 Parse(),整个问题都会消失。
-
为什么
ExternalId是一个字符串?这将允许重复数字,例如001、01和1。如果这是可以接受的,那么在 SQL 中使用 numeric 排序是没有意义的。所有这些 ID 将以随机顺序出现,此时 SQL 将根据001、01、1应用正确的字母顺序 -
真正的问题是排序。如果先按长度排序,然后再按字符串值排序,则相当于数字排序(如果没有前导零),您可以返回
IQueryable。
标签: c# linq iqueryable