Пересечь два списка объектов по общему свойству, а затем сравнить другое свойство - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть два списка

List<objA> List1 List<objA> List2

Я хочу сравнить эти два списка в поле ID, как только совпадение найдено, я хочу сравнить другое поле Distace средиэти два списка и захватите объект с более низким значением.

Использование Linq не дает желаемого результата, по крайней мере, для первой части проблемы.

var test = List1.Select(x => x.ID) .Intersect(List2.Select(y => y.ID));

1 Ответ

0 голосов
/ 09 декабря 2018

Вот один из способов сделать это с Linq.Во-первых, объедините два списка вместе с Union.Затем сгруппируйте их по полю Id.Наконец, упорядочите эти подсписки по Distance внутри группировки и возьмите первый из каждого, чтобы получить список объектов по Id с минимальным доступным расстоянием.

var aList = new[]
{
    new SomeObject() { Id = 1, Distance = 3 },
    new SomeObject() { Id = 2, Distance = 5 }
};

var bList = new[]
{
    new SomeObject() { Id = 1, Distance = 2 },
    new SomeObject() { Id = 2, Distance = 6 }
};

var results = aList
    .Union(bList)
    .GroupBy(a => a.Id, a => a)
    .Select(a => a.OrderBy(b => b.Distance).First());
...