在Lambda Expression中检查null

时间:2012-05-14 17:59:43

标签: c# linq

在下面的代码中,我试图从List中获取null,空字符串和源组件。我还没有测试过这段代码,但我的直觉告诉我,当过滤List for source和空字符串时,如果它来自null值,它会破坏。

我首先尝试提取空值,但我仍在过滤基本列表。如何以最佳方式重新编写此代码以完成我想要做的事情?

List<LineItem> nullList=itemsList.Where(s => s[Constants.ProductSource] == null)
                                 .ToList();

NALineItems = itemsList.Where(s => s[Constants.ProductSource] == source 
                                   || s[Constants.ProductSource] == String.Empty)
                       .ToList();

NALineItems = nullList.Union(NALineItems).ToList(); 

s [Constants.ProductSource]是Microsoft ECommerce PurchaseOrder对象的附件属性。它基本上是对象的另一个属性。

2 个答案:

答案 0 :(得分:1)

基于“我试图从列表中获取null,空字符串和源组件”我假设您需要一个包含这3个特定值的列表。

var allItems = itemsList
                 .Where(s => string.IsNullOrEmpty(s[Constants.ProductSource])
                             || s[Constants.ProductSource] == source)
                 .ToList()

答案 1 :(得分:0)

有没有理由你不能将表达式合二为一?我还要添加一个检查字符中是否存在密钥:

List<LineItem> NALineItems = itemsList.Where(s =>
    s.ContainsKey(Constants.ProductSource) && (
        String.IsNullOrEmpty(s[Constants.ProductSource]) ||
        s[Constants.ProductSource] == source))
    .ToList();