2017-03-31 13 views
0

有沒有辦法在所有我把從該列中的控制器讀取數據之前,更改列名,例如我有2列在我的表「節」:「標題」和「TitleEN」在獲取數據之前是否有方法更改列名稱?

如果當前文化是「恩」,我想取「TitleEn」的數據,但在我的代碼,我將只使用「標題」是這樣的:

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

我工作的一個項目,只有一種語言,然後客戶端要求增加英文。不幸的是,我通過爲每個有字符串字段的表添加語言字段來做出錯誤的決定。

現在我想解決這個問題,因爲項目有很多代碼只處理沒有「En」的字段。

+0

這種國際化的方法聽起來像將導致*許多*相同的條件/開關/等。遍佈整個代碼。 – David

+0

所以,有沒有簡單的方法來解決這個!!? – user2903753

回答

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; } 
    } 
} 

這樣一來,你的代碼將不會改變,但你會下來每次都選擇這兩個值。

+0

這正是我所做的,但沒有[NotMapped]並刪除「標題」字段中的設置 – user2903753

+0

我不打算設置,但如果你有代碼也在更新Title屬性,那麼這將使這仍然工作,太。另外,如果你喜歡這種風格,你可以在FluentApi中忽略。 :) –

0

不是最好的解決辦法,但你可以只使用一個如果currentcul是恩,然後

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

我會建議使用不同勢解壽。

+0

我想你也可以在將模型發送到視圖之前將模型標題改爲TitleEn。 – user3759748

0

我希望這將工作

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()))); 
相關問題