110,571
社区成员
发帖
与我相关
我的任务
分享
public class A
{
public string Name { get; set; }
public List<B> BS { get; set; }
}
public class B
{
public string DES { get; set; }
}
private static List<A> listA;
private static List<A> listA1;
private static List<A> listA2;
static void Main(string[] args)
{
Init();
listA = CombineA(listA, listA1);
listA = CombineA(listA, listA2);
Console.ReadKey();
}
static List<A> CombineA(List<A> a1, List<A> a2)
{
bool bUnequal = true;
bool bDetailUnequal = true;
for (int i = 0; i < a2.Count; i++)
{
bUnequal = true;
for (int j = 0; j < a1.Count; j++)
{
if (a1[j].Name == a2[i].Name)
{
bUnequal = false;
for (int k = 0; k < a2[i].BS.Count; k++)
{
bDetailUnequal = true;
for (int l = 0; l < a1[j].BS.Count; l++)
{
if (a1[j].BS[l].DES == a2[i].BS[k].DES)
{
bDetailUnequal = false;
}
}
if (bDetailUnequal)
{
a1[j].BS.Add(a2[i].BS[k]);
}
}
}
}
if (bUnequal)
{
a1.Add(a2[i]);
}
}
return a1;
}
static void Init()
{
listA = new List<A>
{
new A
{
Name="a",BS=new List<B>
{
new B{DES="a1"},
new B{DES="a2"}
}
}
};
listA1 = new List<A>
{
new A
{
Name="b",BS=new List<B>
{
new B{DES="b1"},
new B{DES="b2"}
}
},
new A
{
Name="c",BS=new List<B>
{
new B{DES="c1"},
new B{DES="c2"}
}
}
};
listA2 = new List<A>
{
new A
{
Name="c",BS=new List<B>
{
new B{DES="b1"},
new B{DES="c2"}
}
},
new A
{
Name="a",BS=new List<B>
{
new B{DES="c1"},
new B{DES="c2"}
}
}
};
}
}
var query = from x in listA
group x by x.Name into g
select new A
{
Name = g.Key,
BS = (from y in g
from z in y.BS
group z by z.DES into h
select new B
{
DES=h.Key
}).ToList ()
};
var query = from x in listA
group x by x.Name into g
select new A
{
Name = g.Key,
BS = (from y in g
from z in y.BS
select z).Distinct().ToList()
};
或者var query = from x in listA
group x by x.Name into g
select new A
{
Name = g.Key,
BS = g.SelectMany(y => y.BS).Distinct().ToList()
};
学好 linq,需要下点功夫。否则写一大堆无聊的“循环”代码,看起来费劲,理解起来更费劲。不如 Linq 计算形式干净易懂。