使用查询表达式的 Linq 顺序
Posted
技术标签:
【中文标题】使用查询表达式的 Linq 顺序【英文标题】:Linq order by using query expression 【发布时间】:2019-03-13 04:43:31 【问题描述】:是否可以使用基于动态字符串参数的 linq 查询表达式来做 orderby
表达式?因为我的查询产生了奇怪的 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,其中 sortParam 的 order 被转换为 (SELECT 1)
。下面的 sql profiler 捕获的完整查询:
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 order,但他们都使用lambda而不是查询表达式,请赐教
【问题讨论】:
sortParam
是一个字符串变量,在查询时是一个常数值,按常数值排序和不排序是一样的。
【参考方案1】:
如前所述,您传递的是字符串值,而不是反映列名的表达式。但是,有一些选项可以满足您的需求,例如here。
【讨论】:
以上是关于使用查询表达式的 Linq 顺序的主要内容,如果未能解决你的问题,请参考以下文章