如何处理可能的空列表上的顺序

问题描述 投票:1回答:2

我需要从数据库返回项目,但要使用linq降序排列,

这是我的代码:

var productItems = dbResult.ProductItems;
resultObj.productItems = productItems.OrderByDescending(x => x.CreatedDate).ToList();

并且我想知道如果productItems为空,如果我将OrderByDescending应用于可能的空列表,那么代码可能会中断?

那么如何正确处理呢?

c# entity-framework linq generic-list
2个回答
0
投票

[如果您担心productItemsnull,只需检查一下:

var productItems = dbResult.ProductItems;

if (productItems != null)
{
    resultObj.productItems = productItems.OrderByDescending(x => x.CreatedDate).ToList();
}

0
投票

这取决于您是在谈论列表本身为空还是该列表中的一项为空。

对于列表为空:

if (productItems != null)
{
    // your LINQ statement
}

[对于可能为空的项目:

resultObj.productItems = productItems.Where(item => item != null).OrderByDescending(x => x.CreatedDate).ToList();

但是,此解决方案将忽略列表的空项目,这些空项目将不在resultObj.productItems


0
投票

除了先前回答的@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();

这样,您仍然会得到一个项目列表(或您正在使用的任何实体),但是它将是空的。


-2
投票

如果您在c#6.0以上,则可以使用'?'运算符以检查是否为空https://csharp.today/c-6-features-null-conditional-and-and-null-coalescing-operators/

© www.soinside.com 2019 - 2024. All rights reserved.