2010-08-08 102 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"); 
}