【问题标题】:How can I order by a derived property in linq to sql?如何按 linq to sql 中的派生属性排序?
【发布时间】:2011-03-24 09:47:38
【问题描述】:

我有一个名为 Total 的属性,它派生自我的数据对象上的其他值。当我尝试在 linq to sql 中按语句顺序使用此属性时,我得到:成员“...”没有支持的 SQL 转换。这是有道理的,但这种情况有解决办法吗?谢谢!

【问题讨论】:

  • 您所说的“派生”到底是什么意思 - 该属性是否属于您的模型?
  • @Broken:我相信他的意思是它是一个属性,它使用他模型中的其他属性来生成一个值。
  • 它在一个部分类中,用于汇总其他一些属性。

标签: c# asp.net linq-to-sql


【解决方案1】:

您可以调用查询,而不是调用 OrderBy() 子句。

var items = context.Tables.ToList().OrderBy(x=>x.Total);

您可以这样做,因为在您调用 .ToList() 之后,您将使用 linq to objects。

正如 Broken 提到的,这可能并非在所有情况下都有效,另一种可能的解决方案是在您的 .Select() 中重现您的总计算

注意,我的语法可能有点不对劲,我没有 VS :)

var items = context.Tables.Select(t=> new {t.Item1, Total=(t.Price + t.Tax)})
                          .OrderBy(t=>t.Total);

现在授予这种类型的投影后,您将不会再得到Table,但可能是一种选择。

【讨论】:

  • 如果查询包括 Skip()Take(),这可能不是一个选项,否则您必须从数据库中提取 所有 记录。 +1 虽然因为我想不出更好的东西。 AsEnumerable() 也是更轻量级的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多