2009-12-07 5 views
1

Étant donné une fonction comme ci-dessous, je peux prendre une seule table de ma base de données et écrire un lambda en utilisant la méthode d'extension Where et construire tous les autres cas en utilisant un simple wrapper.Generic Database Linq

public void getPeople(Expression<Func<tblPeople, bool>> filter, Action<List<tblPeople>> callback) 
      { 
       var query = from People in sdContext.tblPeople.Where(filter) 
          select People; 


       var DSQuery = (DataServiceQuery<tblPeople>)query; 
       DSQuery.BeginExecute(result => 
       { 
        callback(DSQuery.EndExecute(result).ToList<tblPeople>()); 

       }, null); 
      } 

Ce que je voudrais vraiment faire est maintenant écrire une méthode encore plus générique, que résumés le tblPeople à un paramètre. De cette façon, je pourrais juste avoir une ligne de méthodes pour tous mes appels, au moins ceux qui fournissent des listes! Comment puis-je prendre ceci et construire:

public void getTable<T>(Expression<Func<T, bool>> filter, Action<List<T>> callback) 
      { 
       var query = from DB in sdContext.T.Where(filter) 
          select DB; 


       var DSQuery = (DataServiceQuery<T>)query; 
       DSQuery.BeginExecute(result => 
       { 
        callback(DSQuery.EndExecute(result).ToList<T>()); 

       }, null); 
      } 

Est-ce possible!

Répondre

0

Cela pourrait fonctionner ...

public void getTable<T>(Expression<Func<T, bool>> filter, Action<List<T>> callback) 
{ 
    var query = from DB in sdContext.GetTable<T>.Where(filter) 
       select DB; 


    var DSQuery = (DataServiceQuery<T>)query; 
    DSQuery.BeginExecute(result => 
    { 
     callback(DSQuery.EndExecute(result).ToList<T>()); 
    }, null); 
} 
+0

J'ai indiqué que j'utilise ADO.NET Dataservices et je ne pense pas que cette méthode GetTable est disponible dans la bibliothèque cliente silverlight. C'est presque ce que je cherchais! – DavidA