有没有办法在获取数据之前更改列名?

时间:2017-03-31 11:52:37

标签: asp.net-mvc entity-framework

有没有办法在我调用该列的所有控制器中获取数据之前更改列名,例如我在表“Section”中有2列:“Title”和“TitleEN”

如果当前文化是“en”,我想获取“TitleEn”数据,但在我的代码中,我只会使用“Title”,如下所示:

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

我正在开发一个只有一种语言的项目,然后客户要求添加英语。不幸的是,我通过为每个包含字符串字段的表添加语言字段做出了错误的决定。

现在我想解决这个问题,因为该项目有很多代码只处理没有“En”的字段。

3 个答案:

答案 0 :(得分:0)

不是最好的解决方案,但你可以使用如果currentcul是En,那么

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

我建议使用不同的解决方案。

答案 1 :(得分: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())));

答案 2 :(得分: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; }
   }
}

这样,您的代码不会改变,但您每次都会选择两个值。