当外键为空时,使用Lambda表达式在List<T>中进行Order By排序

3
以下是我的查询:
List<db_table> listData = db.db_table.Take(50).ToList();

现在我想将这个列表按照顺序排序。为此我尝试了以下操作:
listData = db.db_table.OrderBy(x => x.db_table1.column_name).ToList();

我的列中包含“null”,这时会抛出错误。

考虑到db_table从db_table1分配了外键。


您是否希望过滤掉空值?如果不是,您希望它们在排序列表中的哪个位置? - D Stanley
我也想进行过滤。对我来说,将其列入列表是必要的。 - iamraviraj
所以在 OrderBy 之前加上 .Where(x => x.db_table1 != null) - D Stanley
@DStanley 让我试试看.. - iamraviraj
3个回答

5
你可以扩展你的lambda表达式,或者使用c# 6特性
// use c# 6.0 ?. operator
listData = db.db_table
             .OrderBy(x => x.db_table1?.column_name)
             .ToList();

// check value manually
listData = db.db_table
             .OrderBy(x => x.db_table1 != null ? x.db_table1.column_name : string.Empty)
             .ToList();

// filter null values before sorting
listData = db.db_table
             .Where(x => x.db_table1 != null)
             .OrderBy(x => x.db_table1.column_name)
             .ToList();

你可以尝试在第一个查询中使用以下代码:.OrderBy(x => x.db_table1?.column_name ?? "") - Ric
@vadim 我尝试了你回答中的第二个选项,对我有用。谢谢啊!!! - iamraviraj
@vadim 在应用您上面发布的选项后,列表中的项目数减少了。 - iamraviraj
@Ranger 我不确定你在问什么。如果你使用第二个选项而没有使用 Where 方法,那么项目的计数是无法减少的。 - Vadim Martynov
@VadimMartynov 抱歉..那只是一个bug,不是代码问题...我的代码运行良好.. :) - iamraviraj

2
OrderBy之前添加一个Where子句:
listData = db.db_table
             .Where(x => x.db_table1 != null)
             .OrderBy(x => x.db_table1.column_name)
             .ToList();

1
尝试以下内容:
listData = db.db_table.OrderBy(x => x.db_table1?.column_name ?? "").ToList();

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