EqualityComparer в LINQ - как мне это сделать? - PullRequest
0 голосов
/ 08 августа 2010

Я думаю, что код ниже хорош. Но как я могу написать это в LINQ? как я могу сравнить объект типа Employee в linq?

namespace GenericReplacement
{
    class Program
    {
        static void Main(string[] args)
        {
            EmployeeComparer employeeComparer = new EmployeeComparer();

            Employee employee1 = new Employee() { ID = 1, Name = "yusuf", SurName = "karatoprak" };
            Employee employee2 = new Employee() { ID = 2, Name = "Ali", SurName = "Yılmaz" };

            bool returnValue = employeeComparer.Equals(employee1, employee2);
            int returnValueHashCode = employeeComparer.GetHashCode(employee1);

            Console.WriteLine("Result: "+returnValue.ToString()+"\n");
            Console.WriteLine(returnValueHashCode.ToString());
            Console.ReadKey();
        }
    }

    public class EmployeeComparer: EqualityComparer<Employee>
    {
        public override bool Equals(Employee x, Employee y)
        {
            return EqualityComparer<Employee>.Default.Equals(x, y);
        }

        public override int GetHashCode(Employee obj)
        {
            return EqualityComparer<Employee>.Default.GetHashCode(obj);
        }
    }

    public class Employee
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string SurName { get; set; }
    }
}

Ответы [ 2 ]

4 голосов
/ 08 августа 2010

LINQ не предназначен для замены всего существующего кода.LINQ особенно полезен для некоторых задач (например, для запросов к коллекциям или базам данных), но он не предназначен для использования для всего.

Если у вас есть списки сотрудников, то может иметь смысл использовать LINQ для сравнения двухперечислимых.Например, вы можете использовать перегрузку Enumerable.SequenceEqual, которая требует сравнения:

bool result = Enumerable.SequenceEqual(first, second, comparer);

Для сравнения двух отдельных элементов с использованием LINQ, по-видимому,необходимо.

0 голосов
/ 08 августа 2010

не знаю, почему вам нужно сделать это, как вы обычно используете LINQ, если вы хотите выполнить какое-то действие с коллекцией (запросом и т. Д.), Где будут эти элементы. Если по какой-то причине вам пришлось сделать это (опять же не знаю почему), вы могли бы сделать что-то вроде этого:

 List<Employee> employees = new List<Employee>();
 employees.Add(employee1);

 List<Employee> employees2 = new List<Employee>();
 employees2.Add(employee2);

 IEnumerable<Employee> equalList = employees.Intersect(employees2, new EmployeeComparer());

 if (equalList.Count() == 0)
 {
       MessageBox.Show("Not equal");
 }
 else
 {
       MessageBox.Show("Equal");
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...