linq2sql通用lambda表达式的帮助
在我的数据库中,几乎每个表都有自己的翻译表。即,Sports有SportsTranslations表,表中有以下列:SportId、LanguageId、Name。目前,我正在进行如下翻译:linq2sql通用lambda表达式的帮助,linq,linq-to-sql,lambda,Linq,Linq To Sql,Lambda,在我的数据库中,几乎每个表都有自己的翻译表。即,Sports有SportsTranslations表,表中有以下列:SportId、LanguageId、Name。目前,我正在进行如下翻译: int[] defaultLanguages = { 1, 3 }; var query = from s in dc.Sports select new { sportName = s.SportsT
int[] defaultLanguages = { 1, 3 };
var query = from s in dc.Sports
select new
{
sportName = s.SportsTranslations.Where(st => defaultLanguages.Contains(st.LanguageID)).First()
};
我想知道是否有可能实现某种通用方法,因此我可以像下面这样重构代码:
var query = from s in dc.Sports
select new
{
sportName = s.SportsTranslations.Translate()
};
解决了。以下是我编写的静态方法:
public static class Extras
{
public static T Translate<T>(this IEnumerable<T> table) where T : class
{
try
{
return table.Where(
t => defaultLanguages.Contains(
(int)t.GetType().GetProperty("LanguageID").GetValue(t, null)
)
).First();
}
catch (Exception)
{
throw new ApplicationException(string.Format("No translation found in table {0}", typeof(T).Name));
}
}
}
公共静态类附加
{
公共静态T Translate(此IEnumerable表),其中T:class
{
尝试
{
返回台。在哪里(
t=>defaultLanguages.Contains(
(int)t.GetType().GetProperty(“LanguageID”).GetValue(t,null)
)
).First();
}
捕获(例外)
{
抛出新的ApplicationException(string.Format(“在表{0}中找不到翻译”,typeof(T.Name));
}
}
}