2016-08-29 2 views
2

Я хочу получить список строк, основанный на двух списках lstJobs и lstPraudits. Я хочу получить PlanId, который является общим в обоих списках.Сравнение двух списков с использованием выражения лямбда

Вот мой код-

List<string> result=reviewModel.lstJobs.Select(x=>x.planId.Contains(reviewModel.lstPraudits.Slect(y=>y.PlanId).toList())); 

Что я делаю неправильно здесь. Код содержит сообщение об ошибке.

+1

Источником сообщений об ошибках могут быть пропущенные идентификаторы типа 'Slect' и' toList', если вы сами не определили эти методы. –

+0

Вы пропустите орфографию Выбрать – Developer

+0

Каков тип planId? Это коллекция? Также я вижу, что написание запроса во внутреннем запросе неверно. –

ответ

3

Использование Enumerable.Intersect:

List<string> result = reviewModel.lstJobs.Select(x=> x.PlanId) 
    .Intersect(reviewModel.lstPraudits.Select(y=> y.PlanId)) 
    .ToList(); 

Что я делаю неправильно здесь

Ваш подход является неправильным, потому что x.planId.Contains будет искать подстроки и вы передаете список к методу. В любом случае это неправильный подход, потому что вы не хотите сравнивать подстроки.

+0

Спасибо, что это был правильный путь. –

0

Использование Intersect - хороший подход. Но если вы говорите, что делаете неправильно, я бы сказал, что вы повторяете неправильную вещь. Запрос в соответствии с вашим appproach должно быть:

List<string> result = reviewModel.lstJobs.Select(x => reviewModel.lstPraudits.Select(y=>y.PlanId).Contains(x.planId)) 
0

Использование Where для сравнения между обоими List.

List<string> result = 
     reviewModel.Where(x => x.planId.Contains(reviewModel.lstPraudits.Select(y=>y.PlanId))) 
     .ToList(); 
Смежные вопросы