2010-01-05 4 views
1

Dans ma base de données, presque toutes les tables ont leur propre table de traduction. C'est à dire. Sports a une table SportsTranslations avec des colonnes: SportId, LanguageId, Name. En ce moment je prends les traductions comme:Aide pour linq2sql expression générique lambda

int[] defaultLanguages = { 1, 3 }; 
var query = from s in dc.Sports 
      select new 
        { 
         sportName = s.SportsTranslations.Where(st => defaultLanguages.Contains(st.LanguageID)).First() 
        }; 

Je me demande est-il possible de mettre en œuvre une sorte de méthode générique, donc je pourrais factoriser le code comme ici:

var query = from s in dc.Sports 
      select new 
        { 
         sportName = s.SportsTranslations.Translate() 
        }; 

Répondre

0

Résolu. Voici la méthode statique que j'ai écrite:

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