110,549
社区成员
发帖
与我相关
我的任务
分享
List<User> list = new List<User>();
var query = list.GroupBy(g => new { g.IDa,g.IDb,g.IDc,g.IDd }).Select(s=>s.FirstOrDefault());
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LinqDistinctTest
{
class Program
{
static void Main(string[] args)
{
var query1 = from a in GetData()
group a by new { a.A } into g
select g.FirstOrDefault();
foreach (var u in query1)
Console.WriteLine(u.ToString());
Console.WriteLine("=============");
var compare = new UserCompare();
var query2 = GetData().Distinct(compare);
foreach (var u in query2)
Console.WriteLine(u.ToString());
Console.WriteLine("=============");
Console.Read();
}
static List<User> GetData()
{
return new List<User> {
new User { A = "a1", B = "b1", C = "c1", D = "d1" },
new User { A = "a1", B = "b1", C = "c1", D = "d1" },
new User { A = "a2", B = "b1", C = "c1", D = "d1" },
new User { A = "a1", B = "b2", C = "c1", D = "d1" },
new User { A = "a1", B = "b1", C = "c1", D = "d1" },
new User { A = "a1", B = "b1", C = "c2", D = "d1" },
new User { A = "a1", B = "b1", C = "c1", D = "d2" },
};
}
}
class UserCompare : IEqualityComparer<User>
{
#region IEqualityComparer<User> Members
public bool Equals(User x, User y)
{
return (x.A == y.A && x.B == y.B && x.C == y.C && x.D == y.D);
}
public int GetHashCode(User obj)
{
return obj.ToString().ToLower().GetHashCode();
}
#endregion
}
class User
{
public string A;
public string B;
public string C;
public string D;
public override string ToString()
{
return string.Format("{0},{1},{2},{3}", A, B, C, D);
}
}
}
User user1 = new User() { IIDa = 1, IIDb = 1, IIDc = 1, IIDd = 1, Name = "a", Value = 3 };
User user2 = new User() { IIDa = 2, IIDb = 2, IIDc = 2, IIDd = 2, Name = "b", Value = 3 };
User user3 = new User() { IIDa = 1, IIDb = 1, IIDc = 1, IIDd = 1, Name = "a", Value = 3 };
User user4 = new User() { IIDa = 1, IIDb = 1, IIDc = 1, IIDd = 1, Name = "s", Value = 3 };
User user5 = new User() { IIDa = 2, IIDb = 2, IIDc = 2, IIDd = 2, Name = "d", Value = 3 };
User user6 = new User() { IIDa = 3, IIDb = 3, IIDc = 3, IIDd = 3, Name = "c", Value = 3 };
User user7 = new User() { IIDa = 3, IIDb = 3, IIDc = 3, IIDd = 3, Name = "e", Value = 3 };
User user8 = new User() { IIDa = 3, IIDb = 3, IIDc = 3, IIDd = 3, Name = "f", Value = 3 };
User user9 = new User() { IIDa = 3, IIDb = 3, IIDc = 3, IIDd = 3, Name = "g", Value = 3 };
List<User> list = new List<User>();
list.Add(user1);
list.Add(user2);
list.Add(user3);
list.Add(user4);
list.Add(user5);
list.Add(user6);
list.Add(user7);
list.Add(user8);
list.Add(user9);
List<User> list1 = new List<User>();
for (int i = 0; i < list.Count; i++)
{
if (list1.Count != 0)
{
var n = from a in list1 where a.IIDa == list[i].IIDa && a.IIDb == list[i].IIDb && a.IIDc == list[i].IIDc && a.IIDd == list[i].IIDd select a;
if (n.ToList().Count == 0)
{
list1.Add(list[i]);
}
}
else
{
list1.Add(list[i]);
}
}