如何将两个不同类型的linq列表查询合并到新类型列表中?

时间:2009-05-31 23:44:04

标签: sql linq-to-sql

我想将两个不同类型的列表合并为一个新类型列表。我会使用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

 }

1 个答案:

答案 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
            }
    );