Динамическое предложение where в запросе linq

#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.