【问题标题】:BLToolKit: Does it support IQueryable?BLToolKit:它是否支持 IQueryable?
【发布时间】:2011-01-05 20:45:57
【问题描述】:

通常使用 BLToolKit 我通过以下方式从数据库中获取数据:

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

可以通过修改原始查询字符串(修改 WHERE 部分)来解决此问题,但有时会非常复杂。

有什么简单的方法吗?

谢谢。欢迎任何想法!

【问题讨论】:

    标签: c# .net .net-4.0 iqueryable bltoolkit


    【解决方案1】:
    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
            ;
    }
    

    【讨论】:

      【解决方案2】:

      如果你想拥有 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);
      

      【讨论】:

        猜你喜欢
        • 2011-10-09
        • 2019-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多