Considérez une entité nommée employée contenant une pièce d'identité, de l'âge et du nom comme propriétés p>
J'ai deux listes contenant les détails de l'employé p>
Je dois comparer les deux listes à l'exclusion de la colonne ID P>
Aide avec vos suggestions P>
3 Réponses :
Cela donnera toutes les entrées identiques dans les deux listes, ignorant la propriété ID de votre employé:
var employees1 = new List<Employee>
{
new Employee(1, "Thomas", 12),
new Employee(2, "Alex", 24),
new Employee(3, "Tobias", 13),
new Employee(4, "Joshua", 12),
new Employee(5, "Thomas", 24)
};
var employees2 = new List<Employee>
{
new Employee(1, "Thomas", 12),
new Employee(2, "Yu", 24),
new Employee(3, "Max", 13),
new Employee(4, "Joshua", 30),
new Employee(5, "Maico", 13)
};
var duplicates = employees1.Intersect(employees2, new EmployeeComparer());
class EmployeeComparer : IEqualityComparer<Employee>
{
public bool Equals(Employee employee1, Employee employee2)
{
if (Object.ReferenceEquals(employee1, null) || Object.ReferenceEquals(employee2, null) ||
Object.ReferenceEquals(employee1, employee2)) return false;
return employee1.Name == employee2.Name && employee1.Age == employee2.Age;
}
public int GetHashCode(Employee employee)
{
return 0;
}
}
class Employee
{
public Employee(int id, string name, int age)
{
Id = id;
Name = name;
Age = age;
}
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
Vous n'avez pas besoin d'utiliser la réflexion. Employee Code> est le type connu dans est égal à la méthode code> et que les propriétés sont également connues. Il suffit donc de comparer d'autres propriétés que ID code> directement serait plus simple que de passer à travers la réflexion.
@Chetanranpariya tu as raison. J'ai mis à jour ma réponse. Je pensais simplement que l'utilisation de la réflexion serait meilleure, si OP décide de toujours ajouter plus de propriétés à sa classe d'employé, il n'est donc pas nécessaire de mettre à jour l'équité à chaque fois.
Comme le message est étiqueté avec Linq, j'ai utilisé cela dans ma réponse.
public class Person
{
private int id;
private string fName;
private string addre;
public string Addre
{
get { return addre; }
set { addre = value; }
}
public string FName
{
get { return fName; }
set { fName = value; }
}
public int ID
{
get { return id; }
set { id = value; }
}
public Person(int i, string f, string a)
{
ID = i;
FName = f;
Addre = a;
}
}
Assumer employé em> classe: Vous pouvez simplement utiliser intersect em>: p>
Quelle sortie attendez-vous de la comparaison? Pouvez-vous l'expliquer avec quelques points de données?
Pour obtenir de l'aide, je vous conseille de montrer au moins certains efforts pour trouver une solution par vous-même.
Il y a des dizaines de façons que vous pouvez faire cela. Vous pouvez faire boucle sur les deux listes, utiliser Linq, sauf, utilisez HASHSETS, utilisez un comparateur personnalisé. Avez-vous essayé quelque chose? Avez-vous rencontré un problème?
Sans aucun autre témoignage indiquant où vous êtes coincé, nous ne pouvons pas vous aider.
@ChetanRanPariya Je dois comparer uniquement des colonnes sélectionnées dans deux listes et vérifier les doublons
Vous devriez mentionner cela dans la question. Quel code vous avez écrit pour cela? Quel problème vous faites face à cela?
Qu'attendez-vous de sortir de cette comparaison? Différentes techniques conviennent mieux à différents problèmes. Les hashèsets par exemple peuvent produire l'intersection ou la différence très rapidement mais pas les deux.
Vous devez utiliser
intersect code> méthode LINQ avec IequalityComparer. Lire ici a>@HARIKRISHNAN
et vérifier les doublons code> ajoutez cela à la question elle-même. C'est important car certaines techniques sont meilleures pour cela que d'autres. Et publier ce que vous avez déjà essayé.