Vb.net 当LINQ IEnumerable的返回为空时,如何不添加到列表中?
我有以下VB.NET代码:Vb.net 当LINQ IEnumerable的返回为空时,如何不添加到列表中?,vb.net,linq,ienumerable,Vb.net,Linq,Ienumerable,我有以下VB.NET代码: Dim list = directoryQuery.Select( Function(d) New With { .dir = d.FullName, .acl = GetFileSystemAccessRule(d).Select( Function(a) New With {.if = a.Referenc
Dim list = directoryQuery.Select(
Function(d) New With {
.dir = d.FullName,
.acl = GetFileSystemAccessRule(d).Select(
Function(a) New With {.if = a.Reference.ToString()}
)
}
)
End Sub
有时GetFileSystemAccessRule(d)的返回是return Enumerable.Empty(of FileSystemAccessRule)(
)。在这种情况下,我既不想将.directory
也不想将.acl
添加到该列表中。我想跳过它
因此,我考虑了删除空项的选项
//tried but failed:
list = list.Where(Function(a) a.acl IsNot Enumerable.Empty(list)).ToList()
//tried but failed:
list = list.Where(Function(a) a.acl IsNot Nothing).ToList()
但不幸的是,他们都失败了。我做错了什么?我想这应该是一条路:
list = list.Where(Function(a) a.acl.Any())
或者类似的东西(我对VB.NET语法不是很精通)。我认为这将是一种方式:
list = list.Where(Function(a) a.acl.Any())
或者类似的东西(我不太精通VB.NET语法)。你能试试list=list.Where(Function(a)a.acl不是什么)
谢谢你的回复,它没有改变列表中的任何内容。也许你可以看看这一行:如果arrRules(I).IsInherited.ToString()=False
向我表明,它没有严格使用选项
。使用该选项,错误消息可能会引导您找到解决方案。这并没有帮助我找到问题的答案,而是修复了另一个错误。谢谢你@Andrew Mortoncan你可以试试list=list.Where(Function(a)a.acl不是什么)
谢谢你的回复,它没有改变列表中的任何内容。也许你可以看看这一点:如果arrRules(i).IsInherited.ToString()=False告诉我它没有严格使用选项
。使用该选项,错误消息可能会引导您找到解决方案。这并没有帮助我找到问题的答案,而是修复了另一个错误。谢谢@Andrew Mortonwoow,搜索了几个小时。使用.Any()
它可以工作!谢谢!哇,搜寻了几个小时。使用.Any()
它可以工作!谢谢!