如何将列组合在一起

时间:2013-02-15 21:35:29

标签: linq lambda

我有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而不必为它们唯一命名。

2 个答案:

答案 0 :(得分:0)

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

 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; }
        }

答案 1 :(得分: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
    });