如何:
var results = localDetails.Join(remoteDetails,
lf => lf.RelativeFilePath,
rf => rf.RelativeFilePath,
(lf, rf) => lf.ModifyDate > rf.ModifyDate ? lf : rf);
这符根据每个列表(因此这两个键选择器)的相对文件路径上的两个列表,然后两人的“结果”,它采用一个具有更大的ModifyDate。
刚刚测试这对一些样本数据(根据您的描述)和它的作品,例如,如果您有:
var localDetails = new List<SyncFile>
{
new SyncFile { ModifyDate = DateTime.Now, RelativeFilePath = "c:\\help", Id = 1 },
new SyncFile { ModifyDate = DateTime.Now.AddDays(1), RelativeFilePath = "c:\\wow", Id = 2 },
new SyncFile { ModifyDate = DateTime.Now, RelativeFilePath = "c:\\y", Id = 6 },
};
var remoteDetails = new List<SyncFile>()
{
new SyncFile { ModifyDate = DateTime.Now.AddDays(-1), RelativeFilePath = "c:\\help", Id = 3 },
new SyncFile { ModifyDate = DateTime.Now.AddDays(5), RelativeFilePath = "c:\\wow", Id = 4 },
new SyncFile { ModifyDate = DateTime.Now, RelativeFilePath = "c:\\x", Id = 5 },
};
var results = localDetails.Join(remoteDetails, l => l.RelativeFilePath, r => r.RelativeFilePath, (lf, rf) => lf.ModifyDate > rf.ModifyDate ? lf : rf);
foreach(var result in results)
{
Console.WriteLine(result.Id);
}
输出将是ID为1和4(我刚添加的ID,这样我会知道哪些是测试目的)。
发布您试图执行的代码。也许我们可以指出你的错误,而不是给你解决方案_as is_。你不应该远离解决方案。 – Otiel