我正在使用迭代列表的LINQ表达式执行查询,如下所示:
([
{ $group: ("global": { $sum: "/*What to do here when I have multiple values*/" } } },
{ $sort: { "global": -1 } },
{ $limit: 10 }}
])
如果没有任何对象,则此表达式将空值添加到列表中。我不知道这是不是正常的行为,但如何在列表中没有任何对象时不添加任何东西呢?
答案 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));