Tengo 2 listas:
List<DefectPopulation> lst_codeDefectSrc = new List<DefectPopulation>(); List<DefectPopulation> lst_codeDefectDest = new List<DefectPopulation>();que son de tipo
private class DefectPopulation { public int ClassCode { get; set; } public int DefectCount { get; set; } }Ahora quiero comparar las dos listas y encontrar el elemento que no coincide.
En la siguiente condición, dice que se encontró una falta de coincidencia, pero quiero saber dónde está:
List<DefectPopulation> lst_codeDefectSrc = new List<DefectPopulation>(); List<DefectPopulation> lst_codeDefectDest = new List<DefectPopulation>(); private class DefectPopulation { public int ClassCode { get; set; } public int DefectCount { get; set; } } List<DefectPopulation> lst_diff = new List<DefectPopulation>(); if (lst_codeDefectSrc.Count == lst_codeDefectDest.Count) { if (lst_codeDefectSrc.Except(lst_codeDefectDest).ToList().Any() && lst_codeDefectDest.Except(lst_codeDefectSrc).ToList().Any()) { status = false; } else { status = true; } }Cambio
if (lst_codeDefectSrc.Except(lst_codeDefectDest).ToList().Any() && lst_codeDefectDest.Except(lst_codeDefectSrc).ToList().Any()) ...A
var inSrcNotInDest = lst_codeDefectSrc.Except(lst_codeDefectDest).ToList(); var inDestNotInSrc = lst_codeDefectDest.Except(lst_codeDefectSrc).ToList(); if (inSrcNotInDest.Any() && inDestNotInSrc.Any()){ // Use the respective list however you want lst_diff.AddRange(inSrcNotInDest); lst_diff.AddRange(inDestNotInSrc); Tenga en cuenta que el código anterior utilizará el comparador de igualdad predeterminado, y esa es una comparación de referencia para los tipos de clase. Si desea la igualdad de valores, debe escribir su propio IEqualityComparer<DefectPopulation> , implementar IEquatable<DefectPopulation> o cambiarlo a una estructura, ya que usa la igualdad de valores de forma predeterminada.
Esto se puede lograr de la siguiente manera simple.
Si la intersección de dos listas tiene el mismo número de elementos que las listas, eso significa que dos listas son iguales.
Puedes usar el siguiente código:
var commonItems = lst_codeDefectDest.Select(item => new { item.ClassCode, item.DefectCount }) .Intersect(lst_codeDefectSrc.Select(item => new { item.ClassCode, item.DefectCount })); status = commonItems.Count() == lst_codeDefectSrc.Count;Está muy bien explicado aquí: https://dotnettutorials.net/lesson/linq-intersect-method/