【问题标题】:Linq orderby on multiple columns with one potentially null多列上的 Linq orderby,其中一列可能为空
【发布时间】:2011-05-15 20:55:09
【问题描述】:

我有一个包含 2 个字段的表格:[Name] 和 [Order]

[订单]可以为空

使用 LINQ,我希望能够按 [Order] 排序,或者如果 [Order] 为空,则按 [Name] 排序

这是我的非工作代码:

from ft in FacetTypes
orderby ft.Name, ft.Order ascending   
select ft

在 linq 中这可能吗?

编辑:

[Order] 是 int 吗? [名称] 是字符串

查询是 Entity Framework 4 之一。

回答:

这就是我最终要做的工作。

ft.Order == null ? ft.Name : SqlFunctions.StringConvert((double)ft.Order)

【问题讨论】:

  • 您的代码有什么问题?你期待什么结果?
  • SqlFunctions.StringConvert 是什么?

标签: linq


【解决方案1】:

您的意思是,如果Order 对单个元素为空,请改用Name?如果是这样,我认为你想要:

from ft in FacetTypes
orderby ft.Order ?? ft.Name
select ft;

这只是使用 C# 2 中引入的 null-coalescing 运算符

【讨论】:

  • 干杯。刚试了一下。错误提示:“运算符 ?? 不能应用于 int? 和字符串类型的操作数。
  • 必须添加SqlFunctions.StringConvert((double)ft.Order)
  • 为大家的帮助干杯。这就是我使用的:“ft.Order == null ? ft.Name : SqlFunctions.StringConvert((double)ft.Order)”
  • @sf:对,之前不清楚数据类型是什么。很高兴它现在可以工作了。
【解决方案2】:

这个怎么样:

var resultSet = 
     ft.Order == null ? 
          FacetTypes.OrderBy(item => item.Name) : 
          FacetTypes.OrderBy(item => item.Order);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多