2009-12-07 54 views
1

給出如下的函數,我可以從我的數據庫中取一個表,並使用Where擴展方法編寫一個lambda表達式,並使用簡單的包裝器方法構建所有其他案例並提供過濾器。通用數據庫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); 
      } 

我現在真正想做的是寫一個更通用的方法,將tblPeople抽象爲一個參數。這樣我就可以爲我的所有電話提供一種線路方式,至少那些提供列表的線路方法!我該如何搭建和構建:

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

這是可能的!

回答

0

這可能會實現...

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

我應該指定,我使用ADO.NET DataService的,我不認爲這GetTable方法是在Silverlight客戶端庫提供。這幾乎是我一直在尋找的! – DavidA 2009-12-07 13:02:36