2011-01-05 15 views
0

Regel mit BLToolKit Ich hole Daten von DB auf folgende Weise:BLToolKit: Unterstützt es IQueryable?

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

Ich möchte Fähigkeit haben, das zu tun, folgende:

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

Es ist möglich, zu umgehen, dass mit Orignal Abfrage Modifizieren -String (ändern WHERE Teil), aber manchmal ist es ziemlich kompliziert.

Gibt es einen einfachen Weg, das zu tun?

Danke. Irgendwelche Gedanken sind willkommen!

Antwort

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

Super! Genial! Genial! – Budda

0

Wenn Sie IQueriable haben möchten, müssen Sie Linq verwenden. BlToolkit.Linq und BlToolkit.Data.Linq müssen importiert werden.

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