Порядок Linq с использованием выражения запроса - PullRequest
1 голос
/ 13 марта 2019

Можно ли сделать выражение orderby, используя выражение запроса linq на основе параметра динамической строки? потому что запрос, который я имею, производит странный запрос SQL

мой linq:

var product = from prod in _context.Products
              join cat in _context.Categories on prod.CategoryId equals cat.CategoryId
              join sup in _context.Suppliers on prod.SupplierId equals sup.SupplierId
              orderby sortParam
              select new ProductViewModel
              {
                   ProductName = prod.ProductName,
                   ProductId = prod.ProductId,
                   QuantityPerUnit = prod.QuantityPerUnit,
                   ReorderLevel = prod.ReorderLevel,
                   UnitsOnOrder = prod.UnitsOnOrder,
                   UnitPrice = prod.UnitPrice,
                   UnitsInStock = prod.UnitsInStock,
                   Discontinued = prod.Discontinued,
                   Category = cat.CategoryName,
                   Supplier = sup.CompanyName,
                   CategoryId = cat.CategoryId,
                   SupplierId = sup.SupplierId
              };

, где var sortParam = "prod.ProductName"

Приведенный выше код создает странный sql, где order by sortParam конвертируется в (SELECT 1). Полный запрос отслеживается профайлером sql ниже:

exec sp_executesql N'SELECT [prod].[ProductName], [prod].[ProductID], [prod].[QuantityPerUnit], [prod].[ReorderLevel], [prod].[UnitsOnOrder], [prod].[UnitPrice], [prod].[UnitsInStock], [prod].[Discontinued], [cat].[CategoryName] AS [Category], [sup].[CompanyName] AS [Supplier], [cat].[CategoryID], [sup].[SupplierID]
FROM [Products] AS [prod]
INNER JOIN [Categories] AS [cat] ON [prod].[CategoryID] = [cat].[CategoryID]
INNER JOIN [Suppliers] AS [sup] ON [prod].[SupplierID] = [sup].[SupplierID]
ORDER BY (SELECT 1)
OFFSET @__p_1 ROWS FETCH NEXT @__p_2 ROWS ONLY',N'@__p_1 int,@__p_2 int',@__p_1=0,@__p_2=10

Я вижу, что многие люди выполняют порядок linq, используя динамический параметр, но все они используют лямбда-выражения, а не выражения запроса, пожалуйста, просветите меня

1 Ответ

0 голосов
/ 20 марта 2019

Как уже упоминалось, вы передаете строковое значение вместо выражения, отражающего имя столбца.Однако есть варианты того, что вы хотите, см. Например здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...