Linq中的动态列

Linq中的动态列,linq,c#-4.0,asp.net-mvc-4,Linq,C# 4.0,Asp.net Mvc 4,我正在用多种语言创建一个网站(en、fr、es),例如,在我的数据库中,我有一个表countries,列为:id、name_en、name_fr和name_es,分别包含英语、法语和西班牙语的国家名称 我正在使用MVC3、c#和实体框架 我已经有了一个返回当前语言的函数:GetCurrentLang()并返回字符串“en”、“fr”或“es” 我想按正确的列排序,并在我的foreach中也按正确的列排序 这是我的密码: using (var db = new InsoutingContext()

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

我正在使用MVC3、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()));
            }
        }

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

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.
您没有进行投影,因此查询的结果将是包含所有属性的一系列国家/地区


这个模型显然不具有很强的可扩展性,因此我将规范化您的国家表,并使用一个外键来引用语言或文化表,然后在您的实体上使用导航属性。然后,您将只加载当前语言的国家/地区,您可以按名称排序。

Thanx回答,这是我不想做的事情,因为我的所有表都有类似的事情,我想我必须对国家/地区执行相同的操作。添加(new ListItem((item.name\u fr),item.Id.ToString());,到处都是。当你告诉我“因为你对它建模的方式”时,你能建议我必须如何建模吗,例如在这个表中。如果我不回复,我必须采取行动:)Znd thanx再次回复是的,准确地说,所以您需要按照描述更改您的模型。例如国家-Id、LanguageId、姓名。语言-Id,代码。这是最简单的一对多关系示例。您可能希望引入一个翻译表,这样就不会因为文化差异而将同一个国家建模为不同的实体。哦,对不起,我在您的第一次回复中没有看到您的建议,我看到了代码,我开始在其中思考,然后回复。因此,对于所有表中的每个值,我将有3行。这听起来很棒,即使我不希望每个国家、城市和其他表格都有3行。幸运的是,我刚刚开始应用程序,所以我可以重新建模。第二个问题:为什么在sql server中删除列并在VS中更新模型edmx时,它不会删除实体中的属性?最后一个问题是,为什么我们在问题的开头写“嗨”,它把它删掉了?谢谢:)你好,我重新开始这个话题:)我完成了重塑,但意识到我有点问题。用户(用户表)有一个城市,因此用户将CityId作为引用城市的外键包含。但在这种情况下(重新建模的db)用户将只有一个城市和一种语言。如何解决这个问题?我有两个想法,但不确定它们是否好:1:创建一个ASS_City_用户(id_User,id_City)或2:在City中添加另一个id_Second,并用不同的语言将相同的id_Second分配给同一个城市。在用户中添加Id_Second您的想法是什么?:)