我有两个List<FileInfo>
列表,SourceFiles
并且DestFiles
. 我想构建一个 LINQ 查询,它将返回文件名在Source
但不在的项目列表Dest
,即左连接。
我的数据集SourceFiles
是:
folder1\a.txt
folder1\b.txt
folder1\c.txt
folder1\d.txt
DestFiles
是:
folder2\a.txt
folder2\b.txt
folder2\c.txt
所以查询应该返回 folder1\d.txt
。
按照MSDN 示例,我尝试使用 LINQ 语法:
var queryX = from s in SourceFiles
join d in DestFiles
on s.Name equals d.Name
into SourceJoinDest
from joinRow in SourceJoinDest.DefaultIfEmpty()
select new
{
joinRow.FullName
};
并使用扩展方法:
var query = SourceFiles.GroupJoin(DestFiles,
source => source.Name,
dest => dest.Name,
(source,dest) => new
{
path = source.FullName
}).Select(x => x.path.DefaultIfEmpty())
但是这些都不起作用;LINQ 语法版本返回Object reference not sent to an instance of an object
,扩展版本返回Enumeration yielded no results.
我意识到这些查询只返回一组FullName
属性,而不是完整的FileInfo
对象;我有接受每个FullName
并返回 a 的代码,FileInfo
并为查询中的每个项目执行此操作以重建列表。但是,如果有办法FileInfo
直接从查询中返回 a,那就太好了。