jeAntoni Ответов: 1

C#LINQ lambda -для получения данных, сравнивающих поля из двух списков


У меня есть 2 списка
- Домашнему ==&ГТ; ИД.№, наименование, стоимость
ListTwo == & gt; ID, Desc, Value

Ожидаемые значения-домашнему
[1, А, 200]
[1, А, 300]
[1, а, 520]
[2, B, 300]
[2, B, 350]
[2, B, 400]
[3, С, 40]
[3, с, 20]

Значения ListTwo-основные данные
[1, аналог, 500]
[2, Пособие,310]
[3, цепочка, 50]

мое требование
Я хочу получить список (скажем, ResultantList), который будет содержать только то значение, которое не превышает значения его соответствующего идентификатора в ListTwo.

Таким образом, ожидается, что ResultantList будет иметь только нижеприведенные данные из ListOne
[1, A, 520] == = & gt; значение здесь 520, 520 превышает значение (500) ID 1 в ListTwo
[2, B, 350] == = & gt; значение здесь равно 350, 350 превышает значение (310) ID 2 в ListTwo
[2, B, 400] == = & gt; значение здесь равно 400, 400 превышает значение (310) ID 2 в ListTwo
===&ГТ;[...]нет никакого значения от 3 идентификатор (имя как C) по-домашнему ;как оба значения(40,20), имеющий id 3 (С) по-домашнему меньше значения 50 с id 3 (описание, услуги) в ListTwo

Что я уже пробовал:

ResultantList = ListOne.Where(s => ListTwo.Any(l => (l.ID == s.ID && s.Value> l.Value))) .ToList();


Но это извлекает все значения, даже если значение меньше соответствующего значения (W.r.t ID) в ListTwo.

jeAntoni

Это прекрасно работает. Каким-то образом я пропустил задание между ними и, таким образом, видел правильный результат.

ResultantList = - Домашнему.Где(S =&ГТ; ListTwo.Любой(л =&ГТ; (л. ИД == ы.ИД &амп;&амп; ы.Значение&ГТ; я.Значение))) .Список();

1 Ответов

Рейтинг:
2

Graeme_Grant

Вот два разных способа сделать это:

1. Стандартный Запрос

var resultantList = from item1 in list1
                    join item2 in list2
                    on item1.Id equals item2.Id
                    where item1.value < item2.value
                    select item1;


2. Лямбда-Выражения
var resultantList = list1.Where(item1 => 
                    list2.Any(item2 => item1.Id == item2.Id 
                            && item1.value < item2.value));


Подробнее вы можете прочитать здесь: Синтаксис запросов и синтаксис методов в LINQ (C#) | Microsoft Docs[^]