動態Linq的邏輯與和邏輯或的條件查詢

2021-06-18 07:34:50 字數 1280 閱讀 1347

最近在做乙個資料檢索的工作,對乙個資料庫中的寬表進行多個條件的檢索。為了簡單方便快捷的完成這個功能,我使用linq to sql+reportview的方式來完成。

首先需要做的是乙個查詢介面和寫乙個資料庫查詢方法。使用者在輸入框中輸入多個指標,將根據指標的格式生成linq的where語句。這個很容易實現,比如輸入「2003 北京 人口」,那麼就根據空格將這個字串分成3個字串,第乙個字串格式是年份,所以用表中的year欄位進行匹配,第二個欄位是地區,所以再用表中的location進行匹配,第三個是指標,那麼就用指標進行匹配,具體的c#**就是:

public static listsearchdata(string itemname)

else if (islocation(item))

else

}return data.tolist();

}}

這個功能還簡單,畢竟多個指標之間都是與的關係,但是接下來如果要實現或的關係,那麼又該怎麼辦呢?這個讓我傷了幾天的腦筋。比如說如果要搜尋北京、上海、重慶的2023年和2023年的人口,那麼該怎麼查呢,我定義了乙個簡單的語法,如果是或關係的指標,那麼就在小括號中用空格隔開。那麼查詢字串就變成了:

(北京 上海 重慶)(2000 2010) 人口

這樣括號之間是與的關係,括號內的內容是或的關係。

但是真正的難點是如何用linq來實現動態的或查詢。我第一想到的是dynamic linq(具體參見:這裡),這個在之前的專案中用過,特別強大,但是在這裡用起來不是很方便,所以又想自己實現一套動態or查詢的方法,結果由於時間和能力有限,也沒有做出來,最後終於找到乙個很好的類庫linqkit,這個類庫中有乙個

public static listsearchdata(string itemname)

data = data.where(predicate);//將最後的predicate傳入where函式,相當於是對括號之間進行邏輯與查詢

} itemname = r.replace(itemname, " ");//把括號給替換掉,再對括號外的內容進行邏輯與查詢

} string items2 = itemname.split(' ');

foreach (string item in items2)

return data.tolist(); } }

資料庫查詢函式已經完成,接下來就是要用reportviewer來展現查詢出來的結果繫結到報表中,具體**如下:

private void binddata(string q)

這裡的dataset1就是對於rdlc報表的資料來源,不能寫錯。

邏輯與和邏輯或的過載

和 是c 中非常特殊的操作符 和 內建實現了短路規則 操作符過載是靠函式過載來完成的 運算元作為函式引數傳遞 c 的函式引數都會被求值,無法實現短路規則 所以一般情況下不會過載邏輯與和邏輯或。下面就用乙個案例來分析為什麼不要過載邏輯或和邏輯與。include class test8 bool ope...

js中的邏輯與( )和邏輯或( )

結果為true時 取最後一項的值 結果為false時 去第乙個為false的值 結果為true時 取 第乙個為true的值 結果為false時 取最後一項的值 var aa 1 2 3 4 4 整個表示式為true 返回 最後一項 var bb 1 2 null undefined 4 null 整...

js中的邏輯與( )和邏輯或( )

發布者 博主 在2014年9月13日 在js中寫出如下的答案 var a 2 var b 3 var andflag a b var orflag a b 問andflag 和orflag 分別是什麼?起初我認為 andflag 和orflag 的值都為 true 畢竟 和 都是求boolean 後...