国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

asp.net 網頁動態查詢條件的實現

2024-07-10 13:23:49
字體:
來源:轉載
供稿:網友
場景

最近有一個需求,會在 mongodb 中插入各種類型的數據,算是記錄業務日志的數據庫吧。
因為業務對象類型都不同,所以插入的數據格式也完全不同。
除此之外,還需要提供一個查詢界面,可以搜索數據。
插入數據沒任何問題,但是查詢就…

查詢設計方案

首先想到的是讓用戶直接輸入 mongodb 查詢語法,類似 json 格式。但是使用者雖然也是開發,可都不熟悉這個語法,所以放棄了。
第二個想法是讓用戶輸入 SQL 語句,然后轉換… 結果以失敗而告終。
最后,看到了 iTunes 智能播放列表的交互設計:

asp.net 網頁動態查詢條件的實現



這里,你可以插入一個條件,也可以插入一組條件(相當于插入了一個括號,括號內是許多條件)。

圖中的表達式可以認為是: Score > 3 && Type == "Music" && Author == "" && ( Author == "" && Author == "" && Author == "")

也就是說,這樣的交互完全可以實現各種嵌套邏輯。

數據結構
為了設計出這樣的結構,肯定要先好好想一下數據結構。

分析后感覺,這里其實就兩種類型,一個可以認為是 QueryGroup,一個可以認為是 QueryItem。

代碼如下:

復制代碼 代碼如下:


public class QueryGroup
{
public GroupType GroupType { get; set; }
public List<QueryItem> Items { get; set; }
public List<QueryGroup> Groups { get; set; }
}

public class QueryItem
{
public string Name { get; set; }
public QuerySymbol OperatorType { get; set; }
public string Value { get; set; }
public DataType ValueType { get; set; }
}


QueryGroup 包含了一組查詢條件,也包含了一組子 QueryGroup,另外還有一個重要的屬性 GroupType ,代表這組數據的邏輯關系是 And 還是 Or。也就是上述界面中的“任何”和“任意”選項。

QueryItem 內部屬性分別是字段名、邏輯操作類型(等于、不等于、大于…)、和屬性類型(整數、文本…)。

設計完數據結構后會有幾個難點:

1.前端交互怎么設計?
2.如何傳給后端?
3.后端得到數據后如何轉換成查詢表達式?
那下面就一個個來攻克吧!

前端設計交互

asp.net 網頁動態查詢條件的實現



這里用的是 bootstrap ,界面非常好看!

先來看看前端設計方案吧,上面是動態條件,下面是一些固定的條件。

這里的結構和上面的數據結構一致,把 html 分兩類,QueryGroup 和 QueryItem。

分別放在兩個隱藏的 div 中,當做模版使用。

代碼如下:

復制代碼 代碼如下:


<div>
<div>
<div>
<div>
<span>匹配以下</span>
<select>
<option value="1">全部</option>
<option value="2">任何</option>
</select>
<span>規則:</span>
<button type="button" title="增加一組條件">
<i></i>
</button>
<button type="button" value="" placeholder="字段名" />
<select value="" placeholder="值" />
<select>
<option value="3">String</option>
<option value="1">Int</option>
<option value="2">Double</option>
<option value="4">DateTime</option>
</select>
<button type="button" src="http://m.survivalescaperooms.com/uploads/allimg/140204/0Z535K49_0.gif">



作者:Dozer
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 历史| 宜都市| 建水县| 东山县| 安龙县| 九寨沟县| 涟水县| 平遥县| 阳西县| 静海县| 阳新县| 福贡县| 曲沃县| 上杭县| 阳山县| 靖安县| 团风县| 海林市| 舒城县| 平泉县| 长治县| 简阳市| 漳平市| 八宿县| 东乡| 英吉沙县| 霸州市| 固镇县| 宁国市| 郑州市| 砚山县| 浪卡子县| 江孜县| 宜阳县| 绥芬河市| 丰台区| 延寿县| 普格县| 图木舒克市| 天津市| 安平县|