繁体   English   中英

C#,两个对象列表发现两个对象中一个变量之间的差异

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM