2017-03-31 8 views
0

私はテーブル "セクション": "タイトル"と "TitleEN"で2列を持っているなど、私はその列を呼び出すすべてのコントローラでデータをフェッチする前に列名を変更する方法はありますか:データを取得する前に列名を変更する方法はありますか?

 section.Where(p => 
     p.Title.ToUpper().Contains(searchword.ToUpper())); 

私は一つの言語でのプロジェクトに取り組んでいたし、クライアント:文化は、私が「TitleEn」データを取得したいが、私のコードでは、私は唯一の「タイトル」のように使います「EN」です英語の追加を要求しました。残念ながら、私は文字列フィールドを持つすべてのテーブルの言語フィールドを追加することによって間違った決定を下しました。

ここでは、プロジェクトには "En"のないフィールドだけを扱うコードがたくさんあるので、これを修正したいと思います。

+0

国際化のこのアプローチは、多くの*同じ条件/スイッチ/などにつながるように思えます。すべてのコードの上に。 – David

+0

これを修正する簡単な方法はありません!! – user2903753

答えて

0

を働くことを願っています

+0

これはまさに私が作ったものですが、[NotMapped]を付けずに "Title"フィールドのセットを取り除くことです – user2903753

+0

私はSetをやるつもりはありませんでしたが、Titleプロパティも更新しているコードがあれば、あまりにも。また、スタイルを好む場合は、FluentApiでIgnoreを実行することもできます。 :) –

0

ない最善の解決策が、あなたはちょうど私が切り抜いたソリューションのカントーを使用することをお勧めします

section.Where(p => 
     p.TitleEN.ToUpper().Contains(searchword.ToUpper())); 
    Else{ 
section.Where(p => 
     p.Title.ToUpper().Contains(searchword.ToUpper())); 
    } 

そして、もしのcurrentculは、ENで使用することができます。私はこれが

var section = new List<Test>(); 
var result = section.Where(x => (System.Globalization.CultureInfo.CurrentCulture.Name.Equals("en") 
              && x.TitleEn.ToUpper().Contains(searchword.ToUpper())) 
            || (!System.Globalization.CultureInfo.CurrentCulture.Name.Equals("en") 
            && x.Title.ToUpper().Contains(searchword.ToUpper()))); 
+0

私は、あなたのモデルをビューに送る前にちょっとだけ、モデルタイトルをTitleEnと同じに変更することもできると思います。 – user3759748

0

私は、これが呼び出されているどのように完全にわからないんだけど、あなたは、エンティティ自体に少し卑劣である可能性があります。エンティティでTitleプロパティを常に使用していると言いますが、カルチャがENに設定されている場合はENにする必要があります。クエリごとに毎回両方の値を選択しても構わない場合は、簡単に修正できます。私はこのような何かだろう、あなたのエンティティで

、:

public class MyEntity 
{ 
    [Column("Title")] // Can use FluentApi here instead 
    public string TitleOld { get; set; } 

    [Column("TitleEN")] 
    public string TitleEN { get; set; } 

    [NotMapped] 
    public string Title 
    { 
    get { return Thread.CurrentThread.CurrentUICulture.Name == "en-US" ? TitleEN : TitleOld; } 
    set { TitleOld = value; } 
    } 
} 

この方法は、あなたのコードが変更されないだろうが、あなたは毎回両方の値をダウン選択すると思います。

関連する問題