Невозможно сравнить два списка, используя LINQ - PullRequest
0 голосов
/ 07 июня 2018

Мне нужно сравнить два типа List на основе значений столбцов Id и Name.List1 имеет names и ids, а List2 также содержит Id, Name и другие столбцы.Теперь я хочу проверить условие, которое одно входное Имя получает в методе.Это Имя не существует в List2, но может существовать в List1. Условие должно подтвердить, что List1 Id не существует в List2 Id, а внешнее Имя может существовать в List1.Я использовал ниже запрос для достижения этой цели.

var IsNameExists= db.List1.Where(a => List2.Any(b=>b.Id!=a.Id) && a.Name== InputName).ToList();

Когда я использую этот запрос, я получаю исключение, например

Невозможно создать постоянное значение типа 'ProjectName.DBEntities.List2'.В этом контексте поддерживаются только примитивные типы или типы перечисления.

Я не уверен, что я сделал неправильно в своем запросе.Пожалуйста, подскажите, как мне это сделать, чтобы проверить существование Имени в Списке 1.

Исправленный запрос и ответ:

var IsNameExists= db.List1.ToList().Where(a => !(List2.Select(x => x.Id).Contains(a.Id) && a.Name== InputName).ToList();

1 Ответ

0 голосов
/ 07 июня 2018

Вы могли бы сделать что-то вроде этого, я думаю, в основном это просто выбрать идентификаторы и отправить их в SQL в качестве примитивов, чтобы сделать хороший простой запрос SQL

Фундаментальная проблема здесь заключается в попытке смешать то, что в памятис LinqToSql, который по сути пытается преобразовать ваш оператор в запрос и запускает его в базе данных.База данных не будет знать о вашем Списке, что у вас есть память, поэтому вы должны либо дать ей то, что она понимает, либо сделать это в памяти.В следующем примере извлекаются идентификаторы и дается базе данных то, что она знает, список int

var ids = List2.Select(x => x.Id).ToList();

var IsNameExists= db.List1.Where(a => !ids.Contains(a.Id) && a.Name== InputName)
                         .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...