在多列上对Linq进行排序,其中一列可能为空。

4

我有一个包含2个字段的表格:[姓名]和[订单]

[订单]可以是空值

使用LINQ,我想能够按[订单]排序,如果[订单]为空,则按[姓名]排序

以下是我的非工作代码:

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

在linq中是否有可能实现这个?

编辑:

[Order]是int类型? [Name]是字符串类型

这个查询是使用Entity Framework 4实现的。

答案:

以下是我最终得到的可行方案。

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

你的代码有什么问题?你期望得到什么结果? - Dyppl
SqlFunctions.StringConvert是什么? - Kiquenet
2个回答

4

你的意思是,如果一个元素的Order为null,那么使用Name代替它吗? 如果是这样,我认为你想要:

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

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


干杯。我刚试了一下。错误提示说:“运算符??不能应用于int?和string类型的操作数。” - sf.
2
必须添加 SqlFunctions.StringConvert((double)ft.Order)。 - Magnus
1
感谢大家的帮助。这是我使用的代码:"ft.Order == null ? ft.Name : SqlFunctions.StringConvert((double)ft.Order)" - sf.
@sf:没错,在之前不清楚数据类型是什么。很高兴现在它能正常工作了。 - Jon Skeet

1
这个怎么样?
var resultSet = 
     ft.Order == null ? 
          FacetTypes.OrderBy(item => item.Name) : 
          FacetTypes.OrderBy(item => item.Order);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接