Maciej Los
В зависимости от ситуации...
Я проверил следующие запросы в этом списке:
List<A> lstA = new List<A>
{
new A(){
ID = 1, lstB = new List<b>()
{
new B(){ID = 1, Name="A", Path="C"},
new B(){ID = 2, Name="A", Path="D"},
new B(){ID = 3, Name="B", Path="E"},
new B(){ID = 4, Name="C", Path="F"},
new B(){ID = 5, Name="D", Path="G"}
}},
new A(){
ID = 2, lstB = new List<b>()
{
new B(){ID = 6, Name="D", Path="C"},
new B(){ID = 7, Name="E", Path="D"},
new B(){ID = 8, Name="E", Path="E"},
new B(){ID = 9, Name="F", Path="F"},
new B(){ID = 10, Name="F", Path="G"}
}},
new A(){
ID = 3, lstB = new List<b>()
{
new B(){ID = 11, Name="F", Path="C"},
new B(){ID = 12, Name="G", Path="D"},
new B(){ID = 13, Name="H", Path="E"},
new B(){ID = 14, Name="H", Path="F"},
new B(){ID = 15, Name="H", Path="G"}
}},
};
Если вы хотите найти дубликат
имена класса
B
(
A
класс игнорируется) на всю
lstA
, попробовать это:
var lstDocumentsWithError = lstA
.SelectMany(x=>x.lstB)
.GroupBy(x => x.Name)
.Where(grp=>grp.Count()>1)
.Select(grp=> new {Name = grp.Key, Count = grp.Count()})
.ToList();
Результат:
Name Count
A 2
D 2
E 2
F 3
H 3
Но если вы хотите сравнить имена только внутри класса
A
, вы должны изменить приведенный выше код на:
var lstDocumentsWithError1 = lstA
.SelectMany(x =>
x.lstB.GroupBy(y=>y.Name)
.Where(grp=>grp.Count()>1)
.Select(z=> new
{
AID = x.ID,
Name = z.Key,
Count = z.Count()
})
);
Результат:
AID Name Count
1 A 2
2 E 2
2 F 2
3 H 3