0

私は多くの言語 (en、fr、es) で Web サイトを作成しています。データベースには、たとえば、id、name_en、name_fr、および name_es を列として持つテーブル country があり、それぞれ英語、フランス語、およびスペイン語。

私は 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 に答える