【发布时间】:2013-07-24 22:34:14
【问题描述】:
在下面的代码中:
var results = from service
in LogisticsService.GetTransportationModes<CarrierTransportationMode>
(
x => x.CarrierId == carrierRoleId &&
x.ParentTransportationModeId != null &&
!(x is LoadCarrierMode) &&
(x.ParentTransportationMode.TransportationModeStatus != null) &&
x.ParentTransportationMode.TransportationModeStatus.Value != TransportationModeStatus.Inactive
)
//.OrderByDescending(o => o.IsDefault)
//.ThenBy(t => t.ParentTransportationMode.Name)
orderby service.IsDefault descending, service.ParentTransportationMode.Name
select new
{
text = service.ParentTransportationMode.Name,
value = service.ParentTransportationMode.Id
};
如果service.IsDefault 为空,我需要完全跳过 orderby / thenby。因此,代码将执行,就好像 linq 中没有 orderby 一样,如下所示:
var results = from service
in LogisticsService.GetTransportationModes<CarrierTransportationMode>
(
x => x.CarrierId == carrierRoleId &&
x.ParentTransportationModeId != null &&
!(x is LoadCarrierMode) &&
(x.ParentTransportationMode.TransportationModeStatus != null) &&
x.ParentTransportationMode.TransportationModeStatus.Value != TransportationModeStatus.Inactive
)
select new
{
text = service.ParentTransportationMode.Name,
value = service.ParentTransportationMode.Id
};
我尝试使用如下条件修改查询:
.OrderByDescending(o => o.IsDefault.HasValue ? o.IsDefault : null)
.ThenBy(t => t.IsDefault.HasValue ? t.ParentTransportationMode.Name : null)
orderby !service.IsDefault.HasValue ? null: service.IsDefault descending, service.ParentTransportationMode.Name
但这并没有帮助。
我是否需要在 orderby 中传递任何特殊参数,以便完全不会有条件地进行排序?可以使用任何像“case”这样的关键字吗?如果有,怎么做?
不胜感激! 谢谢!。
【问题讨论】:
-
你想让
service.IsDefault == null的所有元素都在service.IsDefault == null的所有元素之前还是之后? -
好吧,如果 service.IsDefault == null,我希望所有元素的顺序与从数据库中获取的顺序相同。只有当任何元素都有 service.IsDefault == true 时,我们才应该考虑排序,而不是其他情况。