0

我有 2 个包含不同数据但具有相似列的列表。基本上我想加入这些列表,然后将相似的列合并为 1。

var listCombo= List1.Where(a=>DataIds.Contains(a.dataId)).DefaultIfEmpty()
    .Join(List2,
    list1 => list1.key,
    list2 => list2.key,
    (L1,L2) => new
    {
        L2.key,
        L2.dataId,
        L2.dataValue,
        L2.date,
        L1.secId,
        L1.dataId,
        L1.dataValue
    });

我想将 dataId 和 dataValue 列组合在一起。我怎么做?

所以我可以只说 listCombo.dataId 或 listCombo.dataValue 而不必唯一地命名它们。

4

2 回答 2

0

我会对 list1、list2 和第三个列表使用 POCO 方法,第三个列表是两者的组合。我敢肯定,如果你组合不同的类型,你会做适当的转换,或者如果你想要复杂的类型,你可以将它们定义为它们自己的属性,或者不是。

 static void Main(string[] args)
        {
            List<A> lisA = new List<A> {new A {AId = 1, AName = "Brett"}, new A {AId = 2, AName = "John"}};
            List<B> lisB = new List<B> {new B { BId = 1, BName = "Doe" }, new B { BId = 2, BName = "Howard" } };

            List<C> lisC = lisA.Join(lisB,
                                     list1 => list1.AId,
                                     list2 => list2.BId,
                                     (L1, L2) => new C
                                         {
                                             CId = L1.AId,
                                             CName = L1.AName + " " + L2.BName
                                         }).ToList();

            lisC.ForEach(
                n => Console.WriteLine(n.CName + "\n")
                );

        }

        public class A
        {
            public int  AId { get; set; }
            public string AName { get; set; }
        }

        public class B
        {
            public int BId { get; set; }
            public string BName { get; set; }
        }

        public class C
        {
            public int CId { get; set; }
            public string CName { get; set; }
        }
于 2013-02-15T21:48:18.733 回答
0

如果我理解您的问题,您正在尝试将这两个字段合并为一个。假设你有一个Class

public class List1 {
public int dataId {get;set;}
public string dataValue {get;set;}
public string combinedValue {get;set;}
}

不,你可以像这样使用,

var listCombo= List1.Where(a=>DataIds.Contains(a.dataId)).DefaultIfEmpty()
    .Join(List2,
    list1 => list1.key,
    list2 => list2.key,
    (L1,L2) => new List1
    {
       dataId = L2.dataId,
       dataValue = L2.dataValue
       combinedValue =  L2.dataId + " - " L2.dataValue
    });
于 2013-02-15T22:28:00.020 回答