有没有办法在我调用该列的所有控制器中获取数据之前更改列名,例如我在表“Section”中有2列:“Title”和“TitleEN”
如果当前文化是“en”,我想获取“TitleEn”数据,但在我的代码中,我只会使用“Title”,如下所示:
section.Where(p =>
p.Title.ToUpper().Contains(searchword.ToUpper()));
我正在开发一个只有一种语言的项目,然后客户要求添加英语。不幸的是,我通过为每个包含字符串字段的表添加语言字段做出了错误的决定。
现在我想解决这个问题,因为该项目有很多代码只处理没有“En”的字段。
答案 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; }
}
}
这样,您的代码不会改变,但您每次都会选择两个值。