2010-01-05 41 views
1

在我的數據庫中幾乎每個表都有它自己的轉換表。即體育有SportsTranslations表與列:SportId,LanguageId,名稱。目前,我正在像翻譯:linq2sql通用lambda表達式的幫助

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

回答

0

解決。這裏是我寫的靜態方法:

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