Linq to Sql - выберите только определенную информацию (с помощью Predicate Builder)

StackOverflow https://stackoverflow.com/questions/1223372

  •  11-07-2019
  •  | 
  •  

Вопрос

Я использую Linq to Sql с Predicate Builder и пытаюсь оптимизировать объем информации, получаемой из базы данных. Я хотел бы выбрать только определенные поля для отображения их в виде сетки. Когда я выбираю только то, что хочу, параметры поиска, которые я добавляю (см. Ниже), не работают, как и PredicateBuilder. Вот что я сейчас делаю (это работает, но получает ВСЕ, что слишком много информации)

    ' Initial Setup '
    Dim db As New MyDataContext()
    Dim results = From p In db.Products _
                  Select p

    ' Search '
    If (testCase) Then
        results = results.Where(Function(p) p.SomeAttribute = 123)
    End If

Если я изменю это, чтобы выбрать только то, что мне нужно, например:

    Dim results = From p In db.Products _
                  Select p.Name, p.SomethingElse

тогда я заметил, что если информация выбрана (т.е. я выбираю p.SomeAttribute), тогда я могу выполнить поиск (добавить предложение where) по этому атрибуту, но если это не так, я не могу. И с помощью построителя предикатов это работает, только если я выбираю весь элемент (то есть выбираю p). Все, что нужно сделать, это создать операторы SQL, которые не должны выбирать атрибут для поиска по нему. Как я могу заставить это работать и выбирать только то, что мне нужно, но искать по чему-либо и поддерживать работу prediate builder? Любая помощь очень ценится! Благодаря

Это было полезно?

Решение

Вы можете сначала попытаться сделать " выбрать p " в начале, затем добавьте все свои предложения where и в самом конце выберите только то, что вам нужно.

' Initial Setup '
Dim db As New MyDataContext()
Dim results = From p In db.Products _
              Select p

' Search '
If (testCase) Then
    results = results.Where(Function(p) p.SomeAttribute = 123)
End If

' trim down the columns after you've added the wheres...
Dim results2 = from p in results
               Select p.Name, p.SomethingElse

Другие советы

Вы не можете изменить " выбрать список " (вот как я понял ваш вопрос. Возможно, я неправильно понял) с помощью построителя предикатов (который строит логические выражения). Для этого вы должны вручную использовать вещи в пространстве имен System.Linq.Expressions , но я предлагаю использовать Вместо этого Dynamic LINQ .

Звучит так, как будто вы выполняете проектирование на месте, а не на исходном продукте. Выполнить проекцию Выберите p.Name, p.SomethingElse в конце после применения всех критериев поиска.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top