如何防止Lambda LINQ表达式添加空值

时间:2016-07-08 12:53:52

标签: c# linq lambda

我正在使用迭代列表的LINQ表达式执行查询,如下所示:

   ([
     { $group: ("global": { $sum: "/*What to do here when I have multiple values*/" } } },
     { $sort: { "global": -1 } },
     { $limit: 10 }}
   ])

如果没有任何对象,则此表达式将空值添加到列表中。我不知道这是不是正常的行为,但如何在列表中没有任何对象时不添加任何东西呢?

5 个答案:

答案 0 :(得分:9)

不是使用FirstOrDefault来获取可能为空的值,而只需使用Take将序列限制为一个项目,为您留下一个大小为零或一的序列,您可以将其添加到列表:

feedVideos.AddRange(vid.Where(f => f.UserName == friend.Friend_UserName).Take(1));

答案 1 :(得分:7)

使用简单的if

var result=vid.FirstOrDefault(f => f.UserName == friend.Friend_UserName);
if(result!=null)
{
 feedVideos.Add(result);
}

如果您的列表没有值,那么FirstOrDefault将返回null,因此,是的,这是正常行为。

答案 2 :(得分:4)

如果无法满足条件,

Add会产生空值。您必须在调用var v = vid.FirstOrDefault(f => f.UserName == friend.Friend_UserName); if (v != null) { feedVideos.Add(v); } 之外添加条件检查。

此外,您可以简化Where和FirstOrDefault。

font-size

答案 3 :(得分:3)

您正在显式添加元素,并使用FirstOrDefault函数,如果查询未实现任何结果,则该函数将为类类型返回null。

如果要避免这些空值,则必须拆分查询和添加:

var item = vid.Where(f => f.UserName == friend.Friend_UserName).FirstOrDefault();

if(item != null)
    feedVideos.Add(item);

答案 4 :(得分:3)

如果你要经常使用它,最好创建一个扩展方法

public static class MyExtensions
{
    public static bool AddIfNotNull<T>(this List<T> list, T item)
    {
        bool added = false;

        if(item != null)
        {
            list.Add(item);
            added = true;
        }

        return added;
    }
}

<强>用法:

feedVideos.AddIfNotNull(vid.FirstOrDefault(f => f.UserName == friend.Friend_UserName));