2016-06-05 3 views
-2

У меня есть списки. Один, который содержит все допустимые коды глав (chpt_cd) и связанные с ними коды приложений src. то есть списокЗа исключением LINQ C#

List<ChapterCodeValidationOutput> 

Класс Базовая модель

public class ChapterCodeValidationOutput 
{ 
    public string chpt_cd { get; set; } 
    public string appl_src_cd { get; set; } 
} 

Выборка данных список ..

chpt_cd aapl_src_cd 
------- ----------- 

07038  C062 
07038  C062 
06206  C191 

И еще один список содержит только недопустимые коды глав.

List<string>

только.

И это выборка данных «06206»

Я должен найти соответствующий appl_src_cd недействительного списка глав кодов, т.е. «C191» и так далее. Возвращенный должен быть только списком.

+0

Кажется, что в первом списке есть повторяющиеся значения 'chpt_cd'. Что произойдет, если соответствующие значения 'aapl_src_cd' отличаются друг от друга? –

+0

Они не будут разными. – StrugglingCoder

+1

'var SelectedChapters = Chapters.Where (w => InvalidChapters.Contains (w.chpt_cd)). ToList();' – Plutonix

ответ

1

Except не поможет вам в этом случае.

Предполагая, что эти списки:

List<ChapterCodeValidationOutput> list1 = ... 
List<string> list2 = ... 

Затем вы можете создать поиск из первого списка для быстрого поиска, как это:

var lookup = list1.ToLookup(x => x.chpt_cd, x => x.appl_src_cd); 

, а затем использовать его как это, чтобы получить список соответствующих кодов:

var result = list2.Select(x => lookup[x].First()).ToList(); 

Я предполагаю (поскольку вы упомянули в комментариях), что i f имеются повторяющиеся значения chpt_cd, соответствующие значения appl_src_cd будут равны.

+0

Вызов 'ToDictionary' вызовет' ArgumentException', так как в первом списке в данном примере есть дубликаты chpt_cd. –

+0

@ стоп-крана, справа. Я не видел этого до –

+0

@ stop-cran, вопрос обновлен, чтобы использовать поиск вместо словаря –