LINQ:比较两个列表的名称(字符串)和 return List<object> 而不是 list<string>
LINQ: Compare names (string) of two lists and return List<object> instead of list<string>
我正在比较两个列表,以找出其中一个列表中缺少的列表。
我找到了关于此的其他文章,但我找不到任何使用 属性 比较的文章,但是 returning 'the whole object'.
到目前为止我有:
return xmlFilesProduction
.Select(i => i.Name).ToList()
.Except(xmlFilesRepository
.Select(x => x.Path.Replace(gitFilePath, ""))).ToArray();
对于 xmlFilesRepository,我首先需要操作路径,以获取文件名。
到目前为止,它工作得很好,但是,我不想 return 一个包含名称的列表,而是一个包含整个对象 (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>
using the ToHashSet()
extension method。 HashSet<T>
非常适合在恒定时间内检查集合成员资格。那么只需要使用 .Where()
而不是 .Except()
来过滤掉在 repoFileNames
集合中找到 Name
的“生产文件”。
我正在比较两个列表,以找出其中一个列表中缺少的列表。 我找到了关于此的其他文章,但我找不到任何使用 属性 比较的文章,但是 returning 'the whole object'.
到目前为止我有:
return xmlFilesProduction
.Select(i => i.Name).ToList()
.Except(xmlFilesRepository
.Select(x => x.Path.Replace(gitFilePath, ""))).ToArray();
对于 xmlFilesRepository,我首先需要操作路径,以获取文件名。
到目前为止,它工作得很好,但是,我不想 return 一个包含名称的列表,而是一个包含整个对象 (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>
using the ToHashSet()
extension method。 HashSet<T>
非常适合在恒定时间内检查集合成员资格。那么只需要使用 .Where()
而不是 .Except()
来过滤掉在 repoFileNames
集合中找到 Name
的“生产文件”。