如何解决LINQ:比较两个列表的名称字符串,然后返回List <object>而不是list <string>
我正在比较两个列表,以查找其中一个列表中缺少的列表。 我找到了其他有关此的文章,但我无法使用属性比较找到其中的任何文章,而是返回“整个对象”。
到目前为止,我有:
return xmlFilesProduction
.Select(i => i.Name).ToList()
.Except(xmlFilesRepository
.Select(x => x.Path.Replace(gitFilePath,""))).ToArray();
对于xmlFilesRepository,我首先需要操纵路径以获取文件名。
到目前为止,它可以正常工作,但是,我不想返回带有名称的列表,而是返回带有整个对象(FileInfo)的列表。 否则,我需要再次遍历xmlFilesProduction。
这可能吗?而且我是否正确地处理了上面的代码(关于一个LINQ查询中的O(n * m)和各种select语句)?
谢谢!
解决方法
尝试这样的事情:
var repoFileNames = xmlFilesRepository
.Select(x => x.Path.Replace(gitFilePath,string.Empty))
.ToHashSet();
return xmlFilesProduction.Where(i => !repoFileNames.Contains(i.Name)).ToArray();
这将使用HashSet<string>
将“存储库”中的所有文件名放入ToHashSet()
extension method中。 HashSet<T>
非常适合在固定时间内检查集合成员资格。然后,只需使用.Where()
而不是.Except()
来过滤掉Name
在repoFileNames
集中找到的“生产文件”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。