我要收藏:IEnumerable<lineResult> diplayedBondsList和List<string> pIsinListlineResult是一个非常简单的类,定义为:public class lineResult{ public string isin { get ; set ; } public double rate { get ; set ; } public string issuer { get ; set ; }}我试图用pIsinList中的字符串创建一个新列表,但前提是它们不在diplayedBondsList的“ lineResult”元素字段中。一种“左XOR”(左,因为仅会添加两个列表元素中的一个,而在另一个表中没有对应关系)。我试图不使用太多循环,因为我的列表中包含大量数据,并且我认为这样做会使程序变慢。我已经写了这个,但是它似乎不起作用,newBondLines总是为空:IEnumerable<lineResult> newBondLines = diplayedBondsList.Where(item => pIsinList.IndexOf(item.isin) < 0);foreach (lineResult lr in newBondLines){ newIsinList.Add(lr.isin);}另外,我确实使用了循环,也许我可以通过一个不错的LINQ语句来避免它。我如何1)使此“左XOR”工作,以及2)提高其速度? 最佳答案 使用Enumerable.Except:List<string> xorred = pIsinList.Except( diplayedBondsList.Select(x => x.isin)).ToList();请注意,此命令将对Distinct()隐式执行pIsinList(MSDN中未对此进行解释,但是如果您查看source则很清楚),因此,如果,最终结果将是单个new[] { "A", "A" }。您可以“手动”执行pIsinList来解决此“问题”(如果有问题):var set = new HashSet<string>(diplayedBondsList.Select(x => x.isin));List<string> xorred = pIsinList.Where(x => !set.Contains(x)).ToList();关于c# - 使用LINQ在两个列表之间进行“左XOR”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30891608/
10-11 00:00