[英]C#, Two lists of object find differences between one variable in both objects
我有一个程序可以解析两个文件(.txt和.xls),将各种不同的字段存储到对象中
List<AcsRecord> Textrecords = AcsFileParser.Parsefile(path1);
List<ExcelRecord> Execelrecords = excelFileParser.Parsefile(path2);
例如,AcsRecord是:
public string EID {get; set;}
public string Name {get; set;}
Excel记录具有类似的名称记录。 我想在主目录中找到所有在AcsRecord中找到的,在Excelrecord中找不到的名称。 使用linq join,我只能找到相等的对象。 我不确定如何只引用每个记录中的名称字段。 也许像!contains()一样? 谢谢。
是的,您可以执行以下操作:
var excelNames = new HashSet<string>(excelRecords.Select(x => x.Name));
var textRecordsNotInExcel = textRecords.Where(t => !excelNames.Contains(t.Name))
.ToList();
顺便说一下,在此处创建HashSet<string>
是使Contains
检查非常便宜。 List<string>
也可以工作(例如var excelNames = excelRecords.Select(x => x.Name).ToList();
),但是它将涉及对每个文本记录的所有Excel记录名称进行O(N)检查。
编辑:如果只希望文本记录的名称不在Excel中,则容易得多:
var missingNames = textRecords.Select(t => t.Name)
.Except(excelRecords.Select(e => e.Name))
.ToList();
你是对的,你应该这样!Contains()
:
var query= from ar in Textrecords
let er=Excelrecords.Select(r=>r.Name)
where !er.Contains(ar.Name)
select ar;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.