0

通常、BLToolKit を使用すると、次の方法で DB からデータをフェッチします。

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 部分を変更する) ことで回避できますが、かなり複雑な場合があります。

それを行う簡単な方法はありますか?

ありがとう。どんな考えでも大歓迎です!

4

2 に答える 2

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
        ;
}
于 2011-01-06T03:11:24.923 に答える
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);
于 2014-10-27T03:55:48.017 に答える