Я использую условные выражения 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класс