比較兩個列表對象我有有不同類型的對象如何用流利的LINQ
List<Type1> list1
List<Type2> list2
Type1和Type2之間唯一的共同點是ID屬性和日期屬性的兩個列表。
如何獲得ID和日期屬性相等的項目列表?
var list3 = list1.where(x=>x.id == ??
感謝
比較兩個列表對象我有有不同類型的對象如何用流利的LINQ
List<Type1> list1
List<Type2> list2
Type1和Type2之間唯一的共同點是ID屬性和日期屬性的兩個列表。
如何獲得ID和日期屬性相等的項目列表?
var list3 = list1.where(x=>x.id == ??
感謝
您可以加入多個領域,但你需要別的東西來它們的值存儲英寸
假設其它性能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 { });
你會如何寫流利的語法? – user2206329
如果你想嘗試,我會把它留給你。您需要閱讀[加入](http://msdn.microsoft.com/zh-cn/library/bb534675.aspx)方法。有時查詢語法比方法語法更容易閱讀,具體取決於您要做什麼。 –
如果你想使用擴展方法,你可以使用.Join()方法。
var combination = list1.Join(list2,
l1 => new { l1.Id, l1.Date },
l2 => new { l2.Id, l2.Date },
(l1, l2) => Tuple.Create(l1, l2));
@Enigmativity對不起,你是對的。評論刪除 – agarwaen
@agarwaen - 同樣。 – Enigmativity
創建一個公共基類或接口併爲其實現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()和比較器來創建具有不同對象的合併列表。
List<Type1> t1 = new List<Type1>();
List<Type2> t2 = new List<Type2>();
var combined = t1.Intersect(t2, new BaseClassComparer());
創建一個通用接口(或基類)。 –
...然後使用'Join()' – SLaks
任何示例?碼? – user2206329