2009-12-17 5 views

Répondre

15

Compte tenu DataContext context et string tableName, vous pouvez simplement dire:

var table = (ITable)context.GetType() 
          .GetProperty(tableName) 
          .GetValue(context, null); 
+0

Ok, ITable tbl = db.GetTableByName ("Auteurs"); comment accéder à tbl pour obtenir les enregistrements IEnumerable? – Krunal

+1

Un 'ITable' est aussi un' IEnumerable', donc énumérer les enregistrements en utilisant votre méthode favorite (par exemple, 'foreach (object r in tbl) {}'). – jason

+0

Mais il n'est pas fortement typé. comment puis-je le lancer dynamiquement pour obtenir des données fortement typées? – Krunal

4

Je ne suis pas sûr si le passage des chaînes est une solution élégante. Je préfère envoyer le Type d'entité en tant qu'argument à une méthode. Quelque chose sur ces lignes:

var table = _dataCont.GetTable(typeof(Customer)); 

Here est la documentation MSDN.

+0

je dois utiliser ma variable de chaîne pour obtenir les données de la table. – Krunal

+0

puisque Linq2SQl ne le supporte pas. Vous devrez créer une méthode qui ressemble à Type GetTableTypeFromString (string tableName); Avoir une instruction switch et retourner le type de table désiré – Perpetualcoder

3

Je ne suis pas sûr que je vous suggère comme une bonne solution, mais si vous avez vraiment besoin, vous pourriez faire quelque chose comme ceci:

MyDBContext db = new MyDBContext(); 
Type t = db.GetType(); 
PropertyInfo p = t.GetProperty("Authors"); 
var table = p.GetValue(db, null); 

Cela vous donnera la table des auteurs, comme pr. Table.

+0

Cela va écrire 'table' en tant que' object'; vous devez lancer un 'ITable' avant utilisation. – jason

+0

Pouvez-vous indiquer comment utiliser ITable pour obtenir des données telles que IEnumerable ou IQueryable? – Krunal

+1

Il est déjà à la fois IEnumerable/IQueryable. La différence est que ce n'est pas la version générique IEnumerable /IQueryable , donc vous ne pouvez pas utiliser les requêtes fortement typées dessus. Mais vous pouvez utiliser Dynamic linq pour effectuer des requêtes faiblement typées. Plus d'informations ici: http://www.beansoftware.com/ASP.NET-Tutorials/Dynamic-LINQ.aspx et le télécharger ici: http://code.msdn.microsoft.com/csharpsamples/Release/ProjectReleases.aspx? ReleaseId = 8 (Vous recherchez dynamic.cs) – Terje

0

Si vous connaissez le type, vous pouvez le lancer. De http://social.msdn.microsoft.com/Forums/en-US/f5e5f3c8-ac3a-49c7-8dd2-e248c8736ffd/using-variable-table-name-in-linq-syntax?forum=linqprojectgeneral

MyDataContext db = new MyDataContext(); 
Assembly assembly = Assembly.GetExecutingAssembly(); 
Type t = assembly.GetType("Namespace." + strTableName); 
if (t != null) 
{ 
    var foos = db.GetTable(t); 

    foreach (var f in foos) 
    { 
     PropertyInfo pi = f.GetType().GetProperty("Foo"); 
     int value = (int)pi.GetValue(f, null); 
     Console.WriteLine(value); 
    } 
} 
Questions connexes