Linq orderby 对多列进行排序,其中一列可能为 null

发布于 2024-11-08 00:52:15 字数 469 浏览 0 评论 0原文

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

[Order] 可以为 null

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

这是我的非工作代码:

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

这在 linq 中可能吗?

编辑:

[订单] 是 int? [Name] 是字符串

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

回答:

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

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

I have a table with 2 fields in it: [Name] and [Order]

[Order] can be null

Using LINQ, I'd like to be able to order by [Order] or if [Order] is null then order by [Name]

here is my non-working code:

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

Is this possible in linq?

EDIT:

[Order] is int?
[Name] is string

The query is an Entity Framework 4 one.

ANSWER:

This is what I eventually got to work.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦境 2024-11-15 00:52:15

您的意思是如果单个元素的 Order 为 null,则使用 Name 代替?如果是这样,我认为您想要:

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

这只是使用 C# 2 中引入的空合并运算符。

Do you mean if Order is null for a single element, use Name instead? If so, I think you want:

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

This is just using the null-coalescing operator introduced in C# 2.

一笔一画续写前缘 2024-11-15 00:52:15

这个怎么样:

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

How about this:

var resultSet = 
     ft.Order == null ? 
          FacetTypes.OrderBy(item => item.Name) : 
          FacetTypes.OrderBy(item => item.Order);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文