我需要从数据库返回项目,但要使用linq降序排列,
这是我的代码:
var productItems = dbResult.ProductItems;
resultObj.productItems = productItems.OrderByDescending(x => x.CreatedDate).ToList();
并且我想知道如果productItems
为空,如果我将OrderByDescending
应用于可能的空列表,那么代码可能会中断?
那么如何正确处理呢?
[如果您担心productItems
是null
,只需检查一下:
var productItems = dbResult.ProductItems;
if (productItems != null)
{
resultObj.productItems = productItems.OrderByDescending(x => x.CreatedDate).ToList();
}
这取决于您是在谈论列表本身为空还是该列表中的一项为空。
对于列表为空:
if (productItems != null)
{
// your LINQ statement
}
[对于可能为空的项目:
resultObj.productItems = productItems.Where(item => item != null).OrderByDescending(x => x.CreatedDate).ToList();
但是,此解决方案将忽略列表的空项目,这些空项目将不在resultObj.productItems
中
除了先前回答的@robbpriestley:
如果您不希望ProductItems为null,则可以在订购列表之前设置一个空的默认值
var productItems = dbResult.ProductItems;
if (productItems == null) {
// Set whatever object it can be, such as
productItems = new List<object>();
}
resultObj.productItems = productItems.OrderByDescending(x => x.CreatedDate).ToList();
这样,您仍然会得到一个项目列表(或您正在使用的任何实体),但是它将是空的。
如果您在c#6.0以上,则可以使用'?'运算符以检查是否为空https://csharp.today/c-6-features-null-conditional-and-and-null-coalescing-operators/