資料:
name class
張三 1
張三 1
李四 2
張三 2
張三 2
預期結果:
name class
張三 1
張三 1
李四 2
張三 2
class 為1的情況下不去重 只對class為2的去重。求這樣的linq陳述句
uj5u.com熱心網友回復:
union啊。uj5u.com熱心網友回復:

public static void Main(string[] args)
{
var list = new List<User>() {
new User(){Name="張三",Age=1 },
new User(){Name="張三",Age=1 },
new User(){Name="李四",Age=2 },
new User(){Name="張三",Age=2 },
new User(){Name="張三",Age=2 },
};
var q = list.Where(x => x.Age == 1).Union(list.Where(x => x.Age == 2).Distinct(new userCompare())).ToList();
q.ForEach(x => Console.WriteLine(x.Name + ":" + x.Age));
Console.ReadLine();
}
class userCompare : IEqualityComparer<User>
{
public bool Equals(User x, User y)
{
return x.Name.Equals(y.Name)&&x.Age.Equals(y.Age);
}
public int GetHashCode(User obj)
{
return (obj.Name+obj.Age).GetHashCode();
}
}
public class User
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public bool? IsChild { get; set; }
public User Clone()
{
return (User)this.MemberwiseClone();
}
}
uj5u.com熱心網友回復:
竟然有linq專區。
uj5u.com熱心網友回復:
用distinctuj5u.com熱心網友回復:
lambda 條件1 union 條件2去重,沒毛病 ,思路就是這么個思路,咋寫都差不多var q = (
from c in list
where c.Class == 1
select new { c.Name, c.Class }
).Concat(
(from c in list
where c.Class == 2
select new { c.Name, c.Class }).Distinct());
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/3692.html
標籤:LINQ
上一篇:dllimport
