2010-08-08 58 views
0

我认为下面的代码是很好的。但是我怎样才能在LINQ中编写它?我如何比较linq中的Employee类型对象?LINQ中的EqualityComparer - 我该怎么办?

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; } 
    } 
} 
+4

写什么在LINQ?您编写的代码不需要在LINQ中重写。 – 2010-08-08 09:53:58

+0

如何比较linq中的员工类型对象? – Penguen 2010-08-08 09:57:51

+2

为什么?你想达到什么目的??顾名思义,LINQ是关于**查询**(LINQ = Language Integrated ** Query **) - 它不是为您的代码中的每个操作设计的。我没有看到“在LINQ中”(或更好的:使用LINQ)写这样的东西的好处。 – 2010-08-08 10:03:57

回答

4

LINQ并不是要取代所有现有的代码。对于某些任务(例如查询集合或数据库),LINQ特别有用,但它并不意味着用于一切。

如果您拥有员工的可枚举数,那么使用LINQ来比较两个枚举可能是有意义的。例如,你可以使用Enumerable.SequenceEqual,需要一个比较器过载:

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

为了比较使用LINQ似乎没有必要两个单项目。

0

不知道为什么你需要通常做这个作为你,如果你想要做一些动作来集合(查询等),其中,这些项目将要使用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"); 
}