什么简单的方法可以根据两个List中的对象属性,求两个List 的并集?

zengjd 2010-01-28 12:34:52
什么简单的方法可以根据两个List中的对象属性,求两个List 的并集?
Union得重写比较器。太麻烦。

为什么Union不能用Lambda表达式?
真是没天理!
...全文
590 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2010-01-29
  • 打赏
  • 举报
回复
楼上这是Union吗?Join和Union是两码事。
我算是瞎了眼睛了,楼主这都分不清还给了分,下次不会理你了。
xray2005 2010-01-29
  • 打赏
  • 举报
回复
linq的联合查询,就是可以。比如:

class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}

class Pet
{
public string Name { get; set; }
public Person Owner { get; set; }
}
List<Person> people = new List<Person> { magnus, terry, charlotte, arlene, rui };
List<Pet> pets = new List<Pet> { barley, boots, whiskers, bluemoon, daisy };


var query = from person in people
join pet in pets on person equals pet.Owner
select new { OwnerName = person.FirstName, PetName = pet.Name };
zengjd 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xray2005 的回复:]
不用Lambda,你直接用LINQ写就是了。
[/Quote]
用LINQ好,不过LINQ怎么UNION?
xray2005 2010-01-29
  • 打赏
  • 举报
回复
不用Lambda,你直接用LINQ写就是了。
qldsrx 2010-01-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zengjd 的回复:]
通用比较器?呵呵,是我孤陋寡闻还是你痴人说梦?
[/Quote]
都说的那么明白了,只不过没人问过这方面问题而已,所以你网上找不到答案。

这是我写的通用比较器,只能用在类的内部属性类型都为基本数据类型的情况(记住是属性,不是字段),如果不是基本数据类型,结果可能会有错误,因为我没有处理递归属性比较。
        public class CusComparer<T> : IEqualityComparer<T> where T : class
{

#region IEqualityComparer<T> Members

public bool Equals(T x, T y)
{
foreach (var prop in typeof(T).GetProperties())
{
if (prop.GetValue(x, null) == prop.GetValue(y, null))
{
continue;
}
else
{
return false;
}
}
return true;
}

public int GetHashCode(T obj)
{
int hashcode = 0;
foreach (var prop in typeof(T).GetProperties())
{
hashcode ^= prop.GetValue(obj, null).GetHashCode();
}
return hashcode;
}

#endregion
}
zengjd 2010-01-28
  • 打赏
  • 举报
回复
MS真笨
zengjd 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qldsrx 的回复:]
你是要不重复吗?其实比较器很简单的,而且用的场合非常多,学会后一劳永逸。
[/Quote]

学会倒是没问题。不过如果Union支持Lambda表达式的话,那多简单啊。
想不通MS 为啥不写一个
qldsrx 2010-01-28
  • 打赏
  • 举报
回复
你是要不重复吗?其实比较器很简单的,而且用的场合非常多,学会后一劳永逸。
zengjd 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qldsrx 的回复:]
引用 3 楼 zengjd 的回复:
MS真笨

是你笨,你就不能写个通用的比较器啊,没必要全部都由MS来提供。微软提供了泛型类,泛型比较器完全可以实现任何类的属性比较。
[/Quote]
通用比较器?呵呵,是我孤陋寡闻还是你痴人说梦?
qldsrx 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zengjd 的回复:]
MS真笨
[/Quote]
是你笨,你就不能写个通用的比较器啊,没必要全部都由MS来提供。微软提供了泛型类,泛型比较器完全可以实现任何类的属性比较。

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧