2011-01-05 26 views
0

通常与BLToolKit我通过以下方式获取从DB数据:BLToolKit:它支持IQueryable吗?

using (DbManager db = new MyDbManager()) 
{ 
    IList<MyObjects> objects = db 
     .SetCommand(query)//sometimes with additional parameters 
     .ExecuteList<MyObjects>() 
     ; 
} 

我想有能力做以下:

using (DbManager db = new MyDbManager()) 
{ 
    IQueryable<MyObjects> qObjs = db 
     .SetCommand(query)//sometimes with additional parameters 
     .ExecuteQuery<MyObjects>()// here I don't want query actually to be executed 
     ; 

    // ... another logic, that could pass qObj into other part of program 

    IList<MyObjects> objects = qObjs 
     .Where(obj=>obj.SomeValue>=SomeLimit) // here I want to put additional filters 
     .ExecuteList() // and only after that I wan't to execute query and fetch results 
     ; 
} 

是可能的解决办法与修改一部开拓创新查询-string(修改WHERE部分),但有时它很复杂。

有没有简单的方法可以做到这一点?

谢谢。任何想法都欢迎!

回答

2
using (DbManager db = new MyDbManager()) 
{ 
    IQueryable<MyObjects> qObjs = 
     from p in db.GetTable<MyObjects>() 
     //sometimes with additional parameters 
     select p; 

    // ... another logic, that could pass qObj into other part of program 

    IList<MyObjects> objects = qObjs 
     .Where(obj=>obj.SomeValue>=SomeLimit) // here I want to put additional filters 
     .ToList() // and only after that I wan't to execute query and fetch results 
     ; 
} 
+0

太棒了!真棒!真棒! – Budda 2011-01-06 19:51:42

0

如果你想要IQueriable,你必须使用Linq。 BlToolkit.Linq和BlToolkit.Data.Linq必须导入。

 IQueryable<DataModel.Object> query = db.Object; 


     If ((int)cmb_somthing.SelectedValue) > 0 { 

      int ID = (int)cmb_somthing.SelectedValue; 
      query = query.Where(m=> m.ID = ID); 

     } 
     query = query.Where(m=> m.Date >= StartDate && 
           m.Date <= EndDate);