色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

ASP.NET MVC & EF 構(gòu)建智能查詢 一、智能查詢的需求與設(shè)計(jì)

  關(guān)于復(fù)用

  在我們?nèi)粘5拈_(kāi)發(fā)過(guò)程中,代碼的復(fù)用其實(shí)是很重要的一部分,ASP.NET MVC框架本身為我們提供了很多很好的復(fù)用機(jī)制,讓我們能充分地利用它們來(lái)節(jié)省我們的Coding成本。

  在簡(jiǎn)單的Coding中,我們可以通過(guò)構(gòu)造方法來(lái)實(shí)現(xiàn)代碼段的復(fù)用,在OOP編程中我們可以使用繼承多態(tài)來(lái)進(jìn)行類的復(fù)用,我們也可以使用設(shè)計(jì)模式來(lái)做類或?qū)ο箝g的代碼設(shè)計(jì)的復(fù)用,隨著程序的復(fù)雜我們就想構(gòu)造出更佳的復(fù)用方式,可以向更高層次上抽象。

  應(yīng)用場(chǎng)景與目標(biāo)

  在信息管理系統(tǒng)中我們會(huì)開(kāi)發(fā)大量的List頁(yè)面,它們功能上通常是非常相似的,一般是包含一個(gè)查詢條件組和一個(gè)列表。

  例如下圖所示:

image  那我的目標(biāo)呢,就是對(duì)這里面的查詢功能進(jìn)行封裝,以達(dá)到“只要更改頁(yè)面上的條件,就可以實(shí)現(xiàn)自動(dòng)的查詢邏輯”這樣的功能,即:如果我們要加一個(gè)查詢條件則不需要修改邏輯代碼只修改頁(yè)面即可。

  其實(shí)對(duì)于一個(gè)有經(jīng)驗(yàn)的開(kāi)發(fā)人員呢,根據(jù)HTML頁(yè)面的查詢條件去自動(dòng)生成查詢結(jié)果并不是難事。最簡(jiǎn)單的是將查詢提交表單遍歷,然后連接成一個(gè)SQL進(jìn)行查詢。

  但是使用SQL有很多問(wèn)題:

  1. 注入問(wèn)題,因?yàn)椴恢李愋停院芏嗟胤蕉家磳?xiě)引號(hào)就算是使用Parameter,也無(wú)法處理類型轉(zhuǎn)換的問(wèn)題
  2. 無(wú)法處理Or和And共存的問(wèn)題
  3. 無(wú)法處理其它查詢條件如大于小于Like

  那我們想一下我們使用EF的話是如何正常去編寫(xiě)一個(gè)查詢的呢,我們通常是在邏輯中去拼SQL或是寫(xiě)如下的EF:

var query = db.User.AsQueryable();
if (string.IsNullOrEmpty(name))
query
= query.Where(c => c.Name == name);
if (id.HasValue)
query
= query.Where(c => c.Id == id);
if (string.IsNullOrEmpty(email))
query
= query.Where(c => c.Email == email);
return query.ToList();

NET技術(shù)ASP.NET MVC & EF 構(gòu)建智能查詢 一、智能查詢的需求與設(shè)計(jì),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 永济市| 襄城县| 利辛县| 石楼县| 墨脱县| 双城市| 安陆市| 习水县| 雷山县| 盈江县| 保靖县| 县级市| 镇巴县| 鹤峰县| 锡林郭勒盟| 宁城县| 商水县| 波密县| 土默特左旗| 绥江县| 周宁县| 商南县| 资讯 | 高密市| 砀山县| 巴青县| 于都县| 鹤峰县| 富顺县| 平昌县| 梓潼县| 廉江市| 英德市| 安溪县| 扎兰屯市| 浮山县| 江北区| 斗六市| 沅江市| 瓦房店市| 内丘县|