Используйте IEquatable <> с отличным linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Test> items = new List<Test>() {
new Test() { a = "1", b = "2", c = "3", d = "4", e = "5"},
new Test() { a = "1", b = "2", c = "3", d = "4", e = "5"},
new Test() { a = "1", b = "2", c = "3", d = "4", e = "5"},
new Test() { a = "2", b = "2", c = "3", d = "4", e = "5"},
new Test() { a = "3", b = "2", c = "3", d = "4", e = "5"},
new Test() { a = "4", b = "2", c = "3", d = "4", e = "5"},
new Test() { a = "5", b = "2", c = "3", d = "4", e = "5"},
new Test() { a = "6", b = "2", c = "3", d = "4", e = "5"},
new Test() { a = "7", b = "2", c = "3", d = "4", e = "5"},
new Test() { a = "8", b = "2", c = "3", d = "4", e = "5"}
};
List<Test> distinct = items.Distinct().ToList();
}
}
public class Test : IEquatable<Test>
{
public string a { get; set; }
public string b { get; set; }
public string c { get; set; }
public string d { get; set; }
public string e { get; set; }
public Boolean Equals(Test other)
{
return
(this.a == other.a) &&
(this.b == other.b) &&
(this.c == other.c) &&
(this.d == other.d) &&
(this.e == other.e);
}
public override int GetHashCode()
{
return (this.a + "^" + this.b + "^" + this.c + "^" + this.d + "^" + this.e).GetHashCode();
}
}
}