在Linq中使用排序规则到Sql
想象一下这个SQL查询
select * from products order by name collate Persian_100_CI_AI asc
现在使用Linq:
product = DB.Products.OrderBy(p => p.name); // what should I do here?
我该如何应用整理?
您无法通过LINQ语句更改排序规则。 你最好通过应用一个用正确的文化初始化的StringComparer
进行内存排序(至少……我希望它是正确的)并忽略大小写( true
)。
DB.Products.AsEnumerable() .OrderBy (x => x, StringComparer.Create(new CultureInfo("fa-IR"), true))
没有直接的方法。 解决方法:
在Sql Server中创建函数
CREATE FUNCTION [dbo].[fnsConvert] ( @p NVARCHAR(2000) , @c NVARCHAR(2000) ) RETURNS NVARCHAR(2000) AS BEGIN IF ( @c = 'Persian_100_CI_AI' ) SET @p = @p COLLATE Persian_100_CI_AI IF ( @c = 'Persian_100_CS_AI' ) SET @p = @p COLLATE Persian_100_CS_AI RETURN @p END
在模型中导入并使用:
from o in DB.Products orderby DB.fnsConvert(s.Description, "Persian_100_CI_AI") select o;