2009-12-07 76 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