【发布时间】:2014-03-14 21:18:18
【问题描述】:
对于一个数据库实体,我有两种方法可以获取所选语言的翻译(如果有的话),或者默认语言翻译。
public string GetName(int? LanguageId, int? DefaultLanguageId)
{
string retval = "";
var textInSelectedLanguage = this.CategoryTexts.Where(w => w.LanguageId == LanguageId).SingleOrDefault();
if (textInSelectedLanguage == null)
{
retval = this.CategoryTexts.Where(w => w.LanguageId == DefaultLanguageId).SingleOrDefault().Name;
}
else
{
retval = textInSelectedLanguage.Name;
}
return retval;
}
public string GetDescription(int? LanguageId, int? DefaultLanguageId)
{
string retval = "";
var textInSelectedLanguage = this.CategoryTexts.Where(w => w.LanguageId == LanguageId).SingleOrDefault();
if (textInSelectedLanguage == null)
{
retval = this.CategoryTexts.Where(w => w.LanguageId == DefaultLanguageId).SingleOrDefault().Description;
}
else
{
retval = textInSelectedLanguage.Description;
}
return retval;
}
如您所见,它们非常相似。如果我有更多要翻译的属性,这将不是一个好的实现。其他翻译的行为类似。
如何将这段代码简化为一种方法?
我尝试使用反射,但没有任何结果。
稍后...
我将我的代码简化为一种方法,该方法返回一个实体实例,其中包含所选语言或默认语言的所有属性:
public CategoryText GetTranslation(int? DesiredLanguageId, int? DefaultLanguageId)
{
CategoryText retval = null;
var textInSelectedLanguage = this.CategoryTexts.Where(w => w.LanguageId == DesiredLanguageId).SingleOrDefault();
if (textInSelectedLanguage == null)
{
retval = this.CategoryTexts.Where(w => w.LanguageId == DefaultLanguageId).SingleOrDefault();
}
else
{
retval = textInSelectedLanguage;
}
return retval;
}
我认为通过尝试找到一种方法来将我的CategoryTexts Dbset 替换为任何其他 DbSet 数据库实体,可以轻松地使这种方法变得通用。我该怎么做?
【问题讨论】:
-
您还想操作哪些其他数据库实体?他们是否有一个公共的基类或接口,上面有
LanguageId属性?
标签: asp.net-mvc generics asp.net-mvc-5