mdk*_*k09 15 c# linq asp.net-mvc entity-framework
我有这个表达式:
troubletickets = db.ServiceTickets.Include(t => t.Company).Include(t => t.UserProfile);
troubletickets.OrderByDescending(t => t.UserProfile != null ? t.UserProfile.FirstName : "ZZZ");
Run Code Online (Sandbox Code Playgroud)
我必须检查UserProfile是否为null,因为如果我不这样做,我将收到错误.问题是,有时UserProfiles.FirstName可以为null.当它为null时,当我按升序和降序排序时,这些值将放在列表的顶部.例如
// Null, Null, Andy, Bill, Chris
// Null, Null, Chris, Bill, Andy
Run Code Online (Sandbox Code Playgroud)
我怎样才能改变这个表达式,这样当我按降序排序时,它会返回类似这样的内容:
// Chris, Bill, Andy, Null, Null
Run Code Online (Sandbox Code Playgroud)
Luc*_*ski 25
你几乎是对的:
troubletickets.OrderByDescending(t => t.UserProfile != null
&& t.UserProfile.FirstName != null
? t.UserProfile.FirstName
: string.Empty);
Run Code Online (Sandbox Code Playgroud)
string.Empty将始终是最低的字符串,因此它最终将成为最后一个字符串OrderByDescending.
如果你想要一些既有升序又有降序的东西,你必须分两步进行排序:
troubletickets.OrderByDescending(t => t.UserProfile != null
&& t.UserProfile.FirstName != null)
.ThenByDescending(t => t.UserProfile != null // Or ThenBy
? t.UserProfile.FirstName
: null);
Run Code Online (Sandbox Code Playgroud)
这是因为true > false.
在一般情况下,您可以做些什么来处理它,首先根据值是否为空进行排序,然后根据值本身作为决胜局进行排序。
troubletickets = troubletickets.OrderBy(t => t.UserProfile != null)
.ThenByDescending(t => t.UserProfile);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29593 次 |
| 最近记录: |