Как сделать различия в свойствах трех списков, которые должны быть одинаковыми при использовании LAMBDA

1

У меня есть список объектов, которые в этом случае являются налоговыми формами. List<TaxForm>(); Теперь части этих форм должны иметь ту же информацию, что и некоторые из свойств. Все они происходят от одного и того же клиента. Как я могу посмотреть на все налоговые формы в списке и проверить, не являются ли какие-либо свойства say RecordB? Если это так, мне нужно отметить несоответствия. Я не мог придумать, как это сделать, используя лямбда-выражения. Так, например, все BRCORD для каждого TaxForm должны иметь одинаковое значение для PayerName.

var hasConflict = taxForms.Where(tf => tf.PayerName != priorTaxForm).Count > 0;

Я пытаюсь придумать такой способ, если это возможно. Если нет, я думаю, что я мог бы перебирать список и сравнивать текущий с предыдущей формой, а если отличается, то есть различия. Просто кажется плохим. Заранее спасибо!

Пример того, что я пытаюсь выполнить, но более стабильным образом, заключается в следующем:

var forms = jobObject.TaxForms;
string payerName = forms[0].ARecord.PayerName;
bool hasConflict = !forms.TrueForAll(tf => tf.ARecord.PayerName == payerName);

Прошу прощения за любые опечатки. Больной, чем собака прямо сейчас, и лечит, работая из дома... Бла.


Исходя из ответа на тростник, я думаю, что это то, что лучше всего подходит для моего решения и сценария. Будет ли это не очень хорошо:

Вот что я сделал с благодарностью Рида. Это был совсем другой сценарий, но в итоге я использовал подобную концепцию, чтобы соответствовать потребностям моей нынешней логики.

forms.TrueForAll(t => forms[0].ARecord.PayerName == t.ARecord.PayerName);

Фактически видимое описание проблемы:

ПРИМЕЧАНИЕ * ТОЛЬКО НЕСКОЛЬКО СВОЙСТВ, КОТОРЫЕ МОГУТ БЫТЬ ТАКИМ ИМЯ В ВСЕХ ФОРМАХ. НЕ ВСЕ СВОЙСТВА. СО ПРОВЕРЬТЕ В СПИСОКЕ, ЕСЛИ PROPERTYA, PROPERTYB ИЛИ PROERTYC ИМЕЮТ КОНФЛИКТ, КОГДА СОБСТВЕННОСТЬ D, E, F, ЭТО НЕ СОБИРАЕТСЯ. ТАК СОКРАЩАЮЩИЕСЯ ФОРМЫ БЛАГОДАЛИ, КАК КОНФЛИКТ, ПОТОМУ ЧТО ОНИ ПЕЙТЕРЫ ИМЯ ДОЛЖНЫ ВСЕГДА БЫТЬ ОДНОЙ. ОНИ ОТ ОДНОЙ КОМПАНИИ.

Форма ID: 1099R Имя плательщика: Некоторые кредитные организации Присоединиться: 01/12/2015 Номер формы: 1098 Наименование плательщика: Some Credit UnionForm Дата добавления: 01/20/2015 Форма
ID: 1099INT Имя плательщика: другое имя, поэтому данные флага SubmitDate: 05.01.2012

  • 0
    Нет ничего плохого в итерации списка. Иногда LINQ может усложнить простой цикл.
  • 0
    Было бы неплохо получить список объектов, которые не соответствуют объекту, оцененному как базовое значение. В этой ситуации все те, которые не соответствуют формам [0]. Видите, мне нужно пометить их. На данный момент я выполню это, и если будет помечено, что есть конфликты, то я буду повторять каждую форму и выделять красным цветом, где значения формы различны. Хотя было бы приятнее и понятнее использовать это выражение и вытянуть те, которые не совпадают, в новый список.
Теги:
lambda

1 ответ

3
Лучший ответ

Вы можете использовать Enumerable.Zip для объединения списков вместе.

var conflicts = taxForm1.Zip(taxForm2, (one, two) => new {One = one, Two = two})
                        .Zip(taxForm3, (ot, three) => new {ot.One, ot.Two, Three = three})
                        .Where(f => f.One.PayerName != f.Two.PayerName || f.One.PayerName != f.Three.PayerName);

var hasConflicts =   (taxForm1.Count != taxForm2.Count) 
                  || (taxForm1.Count != taxForm3.Count)
                  || conflicts.Any();

Редактировать в ответ на комментарий:

Если вы просто проверяете, что все элементы в списке совпадают, вы можете:

// Note- requires at least one item in the list.  Add checks if needed.
var hasConflicts = taxForm.Skip(1).Any(t => t.PayerName != taxForm[0].PayerName);
  • 1
    Для справки, это доступно только в .NET 4.0 поздних версиях.
  • 0
    Это не несколько списков, а один список. Все ARecords для каждой налоговой формы в списке должны иметь одинаковое значение. Например, тот же налоговый год.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню