【问题标题】:Selecting property of anonymous type using LINQ throws exception使用 LINQ 选择匿名类型的属性会引发异常
【发布时间】:2017-02-05 17:50:44
【问题描述】:

我的 Linq 查询(我想获取按订单数量排序的项目列表)

var x = context.Items.Include("Item_qualities").Join(
               context.Orders,
               i => i.Id,
               o => o.Item_id,
               (i, o) => new { i, o }
               )
               .GroupBy(e => new { e.i })
               .Select(w => new { w.Key.i, c = w.Count() })
               .OrderByDescending(y => y.c)
               .ToList().Select(u=>u.i);

最后一部分Select(u=>u.i) 抛出异常

text、ntext 和 image 数据类型无法比较或排序, 除非使用 IS NULL 或 LIKE 运算符。

【问题讨论】:

  • 查看异常的文本。它想告诉你什么?
  • 匿名类型必须有变量名:{ w.Key.i, c = w.Count() }
  • @CoryNelson:异常文本说这些类型无法比较。但我的 u.i 不是 text、ntext 或 image 数据类型。
  • context 是实体框架上下文吗?

标签: c# entity-framework linq linq-to-entities


【解决方案1】:

这个错误很明显:

从 SQL Server 2005 开始不推荐使用的文本数据类型不适合比较,因此无法对其进行排序。 image 数据类型也是如此。阅读this 了解更多详情。换句话说,数据库引擎无法根据您指定的列进行排序。

【讨论】:

  • w.Key.i 不是文字,是物品类型
  • 你的 c# 代码中的类型不是 Metter。是sql server上需要修复的表的类型
  • @ScottChamberlain 是的,抱歉,我忽略了排序将在数据库级别执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多