我有一个数据库,该数据库具有类型为varchar(200)的表“电子邮件”字段“主题”。当我在SQL中订购时:
git checkout
我得到以下结果:
我有一个使用第三方网格的旧式桌面应用程序,该应用程序使用.NET的字符串比较功能,这些功能按以下顺序给出结果:
我已经对差异进行了一些研究,这可能是由于使用了数据库而引起的。 .NET网格使用字符串值作为unicode,而sql不使用。
我测试了将varchar(200)字段强制转换为nvarchar(200)字段以进行排序会产生相同的结果:
git reset
我正在制作一个使用LINQ来复制旧版网格中显示的电子邮件顺序的Web应用程序。用户可以动态建立网格的顺序(具有数十列)。我正在创建动态lambda表达式,以在通过多个列进行排序时通过调用创建一系列顺序。这些查询的最后一个障碍是:
是否可以复制在LINQ中创建表达式的部分select Subject from Emails order by Subject
?
orderby建筑的当前示例是:
select Subject from Emails order by cast(Subject as nvarchar(200))
此查询以等于order by cast(Subject as nvarchar(200))
的顺序返回正确的结果。但是我希望它们能够像主题是nvarchar一样进行匹配。
我无法直接在数据库中控制排序规则,也无法将变量的类型更改为nvarchar。我正在使用的旧数据库的字段比我要排序的字段还要多。
答案 0 :(得分:1)
您可以在数据库中创建一个视图,并让Linq使用该视图而不是直接表查询。例如:
create view v_emails as select cast(Subject as nvarchar) from Emails;
接下来,更新您的实体模型,以使视图可用。这样一来,您就可以按主题列以nvarchar格式进行排序,而无需更改数据库中的数据类型。