【问题标题】:Linq orderby culture (danish, æøå)Linq orderby 文化(丹麦语,æøå)
【发布时间】:2013-04-14 14:33:15
【问题描述】:

我的 orderby linq 表达式有问题。它以错误的顺序生成输出。我来自丹麦,正在创建一个丹麦网站,因此订单必须准确无误。

这是我的查询:

var model = (from w in db.News
                orderby w.Title
                select w).ToList();

输出是:

1, 123
2, æøå
3, hallo
4, know

正确的顺序应该是这样的:

1, 123
2, hallo
3, know
4, æøå

我该如何纠正这个问题?

【问题讨论】:

  • 如果排序真的是在数据库中完成,那么SQL server的排序规则是什么?我猜应该是丹麦语或丹麦-挪威语。

标签: c# asp.net-mvc linq entity-framework


【解决方案1】:

如果您将使用流利的 Linq 语法,您可以将字符串比较器传递给 OrderBy 方法:

var model = db.News.OrderBy(w => w.Title, StringComparer.InvariantCulture)
              .ToList();

顺便说一句,您可以使用 StringComparer.Create 方法创建特定于您的文化的字符串比较器:

StringComparer.Create(new CultureInfo("da-DK"), true)

【讨论】:

  • 嘿,谢谢。然而,这会导致错误。说:“LINQ to Entities 无法识别方法 'System.Linq.IOrderedQueryable........ 方法,并且该方法无法翻译成存储表达式。”
  • @KasperHyldalPedersen 不幸的是,Linq to Entities 不支持使用客户比较器进行订购,因为它无法将其转换为 SQL。我建议您通过添加AsEnumerable() 呼叫:db.News.AsEnumerable().OrderBy(...) 将订购移至客户端
  • 啊哈,好吧 AsEnumerable() 部分成功了。感谢您的帮助,由于这个问题,我可能会彻夜未眠:) 非常感谢您。
  • @KasperHyldalPedersen 但是,在数据库中选择丹麦语或丹麦语-挪威语排序规则是很自然的。在这种情况下,数据库应该按照您想要的方式执行order by,而您不必在客户端执行操作。
  • 啊哈,我明白了,目前我只是在使用 SqlServer Compact。所以当我将来扩展到托管数据库(可能是丹麦语)时,这可能会得到修复吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多