專案中有個高階查詢的功能,根據不同查詢條件的各種組合來查詢mongo,這種情況,可使用expression來動態拼接查詢條件來簡化操作
bll中相關**如下
public dataresult getratestaticlist(object param, bool paginating = false)if (dicparam.containskey("channel"))
if (dicparam.containskey("rateplan"))
memberexpression m_start = expression.propertyorfield(p_rate, "start");
constantexpression c_start = expression.constant(dicparam["start"].tostring());
var q_start = expression.lessthanorequal(expression.call(m_start, typeof(string).getmethod("compareto", new type ), c_start), expression.constant(0));
q_chain = expression.andalso(q_chain, q_start);
memberexpression m_end = expression.propertyorfield(p_rate, "end");
constantexpression c_end = expression.constant(dicparam["end"].tostring());
var q_end = expression.greaterthanorequal(expression.call(m_end, typeof(string).getmethod("compareto", new type ), c_end), expression.constant(0));
q_chain = expression.andalso(q_chain, q_end);
var exp = expression.lambda>(q_chain, p_rate);
if (paginating)
result = _dal.list(exp, true, convert.toint32(dicparam["offset"]), convert.toint32(dicparam["limit"]));
else
result = _dal.list(exp);
count = _dal.count(exp);
return fromobject(result, count);
}
記錄如上,以後遇到相同情況可參考。
動態LINQ(Lambda表示式)構建
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!最近一直都忙於專案也沒什麼時間好好總結一下自己在專案中或平時的收穫 大家都知道現在為了提高開發效率,有關於和資料庫互動方面的部分我們一般都會用orm框架,例如entityframework,nhiberhate,linq to sql等,所以我們隊...
c 表示式樹在LINQ動態查詢
一般如果邏輯比較簡單,只是存在有的情況多乙個查詢條件,有的情況不需要新增該查詢條件 簡單方式這樣操作就可以了 csharp view plain copy public iqueryabledynamicchainedsyntax iqueryablefiles,bool pastonly 這裡的多...
表示式樹的構建(詳解)
表示式樹的建立 1 思路 找到最後計算的運算子 即表示式樹的根 然後遞迴處理。2 const int maxn 1e4 int lch maxn rch maxn 每個節點左右兒子的編號 char op maxn 儲存運算子 int nc 0 記錄節點數 int build tree char s,...