2011-05-15 39 views
2

我有2个字段中有一个表:[名称]和[订购]LINQ的排序依据与一个潜在的空

[订购]可以为空

使用LINQ,我想能够通过[在线订购]或者命令[命令]为null,则顺序按[名]

这里是我的非工作代码:

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

这是可能的LINQ?

编辑:

[订单]是int? [名称]是字符串

该查询是一个实体框架4。

答案:

这是我最终得到的工作。

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

什么是不处理你的代码?你期望什么结果? – Dyppl 2011-05-15 12:31:41

+0

什么是'SqlFunctions.StringConvert'? – Kiquenet 2017-07-02 08:18:45

回答

4

你的意思是,如果Order是空的单个元素,使用Name呢?如果是这样,我认为你想:

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

这仅仅是使用C#推出空合并运算 2.

+0

干杯。刚刚尝试过。错误说:“运算符不能应用于int类型和字符串的操作数 – 2011-05-15 12:10:57

+2

必须添加SqlFunctions.StringConvert((double)ft.Order) – Magnus 2011-05-15 12:26:02

+0

欢呼声对每个人都有帮助,这是我用的:”ft.Order == null? ft.Name:SqlFunctions.StringConvert((double)ft.Order)“ – 2011-05-15 12:41:25

1

如何:

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

@sf:我认为它会起作用现在。 – 2011-05-15 12:34:18