我想将两个不同类型的列表合并为一个新类型列表。我会使用join,但是如果例如List A没有该公共属性的值,我仍然想使用List B的值。
class A{
decimal AValue
DateTime Date
int UserID
}
class B{
int BValue
DateTime Date
int UserID
}
class Merge{
decimal? Avalue
int? BValue
DateTime Date
int UserID
}
答案 0 :(得分:0)
如果我理解正确,应该这样做。 由于有2个日期可供选择,我从blist中选择了一个。
假设alist为IEnumerable< A>和bln作为IEnumerable< B>
编辑:上一个答案加入了错误的方式,允许连接的 B 部分为空。我已更新代码以允许空 A 而不是
blist
.GroupJoin
(
alist,
tb => tb.UserID,
ta => ta.UserID,
(tb, ta) => new {tb, ta}
)
.SelectMany
(
j => j.ta.DefaultIfEmpty(),
(j, x) =>
new Merge
{
AValue = x.AValue,
BValue = j.tb.BValue,
Date = j.tb.Date,
UserID = j.tb.UserID
}
);