0

我正在用多种语言(en、fr、es)创建一个网站,在我的数据库中我有一个表国家,例如:id、name_en、name_fr 和 name_es 作为列,分别包含英语、法语和西班牙语。

我正在使用 mvc 3、c# 和实体框架。

我已经有一个返回当前语言的函数:GetCurrentLang() 并返回字符串“en”、“fr”或“es”。

我想按右栏排序,也想在我的 foreach 中找到右栏。

这是我的代码:

using (var db = new InsoutingContext())
        {
            var queryCountries = from qCountries in db.Countries.Where(r => r.Cities.Count > 0 )
                                 orderby qCountries.Name_fr
                                 select qCountries;
            foreach (var item in queryCountries)
            {
                Countries.Add(new ListItem((item.Name_fr), item.Id.ToString()));
            }
        }
4

1 回答 1

0

由于您对其建模的方式,您需要有条件地将排序附加到查询中,例如:

var currentLang = GetCurrentLang();
var queryCountries = db.Countries.Where(r => r.Cities.Count > 0 );

if (currentLang == "es")
{
   queryCountries = queryCountries.OrderBy(c => c.Name_Es);
}
else if (...) // etc.

您没有进行投影,因此您的查询结果将是一系列包含您所有属性的国家/地区。

这个模型显然不是很可扩展,所以我会规范化你的国家表并有一个引用语言文化表的外键,然后在你的实体上使用导航属性。然后,您只会加载当前语言的国家/地区,并且您可以按名称对其进行排序。

于 2013-05-11T21:59:44.707 回答