Условные условия Where в LInq to Entities возвращают все столбцы - PullRequest
0 голосов
/ 17 ноября 2010

Я использую условные выражения where в linq для сущностей, как показано ниже

    Dim q = (From x In ctx.Product)

    If mySearchField = SearchField.ProductId Then
       q = q.Where(Function(y) y.ProductId = mySearchTerm)
    ElseIf s.SearchField = SearchField.ProductCode Then
       q = q.Where(Function(y) y.ProductCode = mySearchTerm)
    ElseIf s.SearchField = SearchField.ProductName Then
       q = q.Where(Function(y) y.ProductName = mySearchTerm)
    End If

Dim productIds As List(Of Integer) = (From x In q Select x.ProductId).ToList

Однако, когда я просматриваю сгенерированный sql через

Debug.Print(DirectCast(q, System.Data.Objects.ObjectQuery(Of Product)).ToTraceString)

Сгенерированный sql показывает, что он выбирает все тристолбцы класса продукта, когда все, что мне нужно вернуть, это ProductId.

SELECT 
[Extent1].[ProductId] AS [ProductId], 
[Extent1].[ProductCode] AS [ProductCode], 
[Extent1].[ProductName] AS [ProductName]
FROM (SELECT 
      [Product].[ProductId] AS [ProductId], 
      [Product].[ProductCode] AS [ProductCode], 
      [Product].[ProductName] AS [ProductName]
      FROM [dbo].[Product] AS [Product]) AS [Extent1]

В любом случае EF заставляет выбирать только те столбцы, которые я укажу, но сохраняю условные условия where для любого свойства, которое мне нужно для Productкласс

1 Ответ

0 голосов
/ 17 ноября 2010

Вы можете динамически создать предложение Where как выражение, а затем применить выражение одновременно с выбором данных из контекста Linq.

Dim MyWhereExpr As Expression(Of Func(Of Product, Bool))
MyWhereExpr = Function(y) True

If ... Then
    MyWhereExpr = Function(y) y.ProductId = mySearchTerm
ElseIf ...

Dim productIds As List(Of Integer) = _
    ctx.Product.Where(MyWhereExpr).Select(Function(y) y.ProductId).ToList
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...