linq2sql通用lambda表达式的帮助

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

在我的数据库中,几乎每个表都有自己的翻译表。即,Sports有SportsTranslations表,表中有以下列:SportId、LanguageId、Name。目前,我正在进行如下翻译:

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