#c# #linq #linq-to-sql #linq-to-objects
#c# #linq #linq-to-sql #linq-to-objects
Вопрос:
Извините за мой плохой английский. У меня есть проблема. Я хочу создать динамическое where
предложение в запросе LINQ. У меня есть одно имя объекта списка «list1», имеющее значения Country
, City
, State
и одно значение datatable, в котором есть столбец с именем Name
, Lastname
Country
City
, State
.,,,,,,,,,,,,,,,,,. Я хочу сравнить значения list1 со столбцами datatable и получить нулевые / пустые строки.
Итак, я хочу запрос LINQ, подобный этому:
var query = from p in datatable.AsEnumerable()
where list1 == null
select p
но оно возвращает ошибку. Как я могу решить эту проблему?
Заранее спасибо.
Комментарии:
1. Какую ошибку вы получаете?
2. Итак, у вас есть список объектов, и у этого объекта есть свойства для страны, города и штата. Вы хотите найти все записи из таблицы в базе данных, которые НЕ соответствуют хотя бы одному значению в вашем списке объектов?
3. Да, хотя бы одно значение должно соответствовать
Ответ №1:
Хорошо, давайте начнем — ваш запрос смехотворно плох.
- У вас не должно быть
datatable.AsEnumerable
— это вызывает сканирование таблицы (выполняется по всей таблице). - Во-вторых, вы должны выразительно закодировать все поля. Это будет неприятно — по определению, в зависимости от размера списка, это будет очень плохо.
В общем, каждый запрос является IQueryable
самим собой, поэтому вы можете связать условия where в цепочку.ОЧЕНЬ приятно — я использую это частично сам, определяя основной запрос, затем добавляя дополнительные предложения where по мере необходимости (по входному параметру) перед выполнением.
К сожалению, сравнение таблицы со списком элементов по совпадению отдельных полей настолько плохо, насколько это возможно на уровне sql.