我有两个列表,它们有不同类型的对象
List<Type1> list1
List<Type2> list2
Type1和Type2之间唯一常见的事情是Id属性和Date属性。
如何获取ID和Date属性相等的Items列表?
var list3 = list1.where(x=>x.id == ??
由于
答案 0 :(得分:1)
如果要使用扩展方法,可以使用.Join()方法。
var combination = list1.Join(list2,
l1 => new { l1.Id, l1.Date },
l2 => new { l2.Id, l2.Date },
(l1, l2) => Tuple.Create(l1, l2));
答案 1 :(得分:0)
您可以加入多个字段,但您还需要其他内容来存储其值。
假设Type1
和Type2
之间的其他属性都不同,您需要第三个类来存储您想要保留的信息。
var results
= (from l1 in list1
join l2 in list2 on new { l1.ID, l1.Date} equals new { l2.ID, l2.Date }
select new SomeThirdClass { });
答案 2 :(得分:0)
创建公共基类或接口并为其实现IEqualityComparer。
public class BaseClass
{
public int Id;
public DateTime Date;
}
class Type1: BaseClass
{
}
class Type2 : BaseClass
{
}
public class BaseClassComparer : IEqualityComparer<BaseClass>
{
#region IEqualityComparer<BaseClass> Members
public bool Equals( BaseClass x, BaseClass y )
{
return x.Id == y.Id && x.Date == y.Date;
}
public int GetHashCode( BaseClass obj )
{
return obj.GetHashCode ();
}
#endregion
}
然后只需使用Intersect()和Comparer创建一个包含不同对象的合并列表。
List<Type1> t1 = new List<Type1>();
List<Type2> t2 = new List<Type2>();
var combined = t1.Intersect( t2, new BaseClassComparer() );