2010-01-05 2 views
1

В моей базе данных почти каждая таблица имеет свою собственную таблицу переводов. То есть Спорт имеет таблицу SportsTranslations с колонками: SportId, LanguageId, Name. На данный момент я беру переводы, как:Help with linq2sql generic lambda expression

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