亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

linq to sql 中,如何解決多條件查詢問題,答案,用表達式樹! (下)

2024-07-10 13:24:50
字體:
來源:轉載
供稿:網友
如何從真正意義上做到延遲加載,即一次只從數據庫中取我們需要的用到的那部分數據呢.通過研究,有了下面的方法:
首先,我們要新建一個靜態類,用于存放多條件組合查詢的各種組合,比如or,And這些等等.代碼如下:

復制代碼 代碼如下:


using System.Linq.Expressions;

public static class PredicateExtensionses
{
public static Expression<Func<T, bool>> True<T>() { return f => true; }

public static Expression<Func<T, bool>> False<T>() { return f => false; }

public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> exp_flow, Expression<Func<T, bool>> expression2)
{

var invokedExpression = System.Linq.Expressions.Expression.Invoke(expression2, exp_flow.Parameters.Cast<System.Linq.Expressions.Expression>());

return System.Linq.Expressions.Expression.Lambda<Func<T, bool>>(System.Linq.Expressions.Expression.Or(exp_flow.Body, invokedExpression), exp_flow.Parameters);

}
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> exp_flow, Expression<Func<T, bool>> expression2)
{

var invokedExpression = System.Linq.Expressions.Expression.Invoke(expression2, exp_flow.Parameters.Cast<System.Linq.Expressions.Expression>());

return System.Linq.Expressions.Expression.Lambda<Func<T, bool>>(System.Linq.Expressions.Expression.And(exp_flow.Body, invokedExpression), exp_flow.Parameters);

}

}


第一步工作完成后,我們就可以從具體應用層面上來調用這種組合了,此處,我們仍以FeedBack表對象為例,表示層調用代碼如下:
我僅列舉核心代碼,注意:PageNavigator1是我頁面的分頁控件.
分頁代碼:

復制代碼 代碼如下:


private void ListDataBind(int pageIndex)
{
int rowCount = 0;
int pageCount = 0;
int pageSize = 30;
Expression<Func<FeedBack, bool>> expr = PredicateExtensionses.True<FeedBack>();
GetCondition(ref expr);
var hs = from h in hm.AllFeedBacks.Where(expr) select h;//延遲加載,數據庫沒有任何操作
if (pageIndex == 1)//如果是第一次取數據,需要獲取符合條件的總記錄條數
{
rowCount = hs.Count();//數據庫進行一次Count操作
}
else//之后的記錄條數,從分頁控件持久態的屬性中獲取,省去一次Count查詢
{
rowCount = PageNavigator1.RecordCount;
}
pageCount = rowCount > pageSize ? Convert.ToInt32((rowCount - 1) / pageSize) + 1 : 1;//通用分頁算法
if (pageIndex > pageCount)
{
pageIndex = pageCount;
}
var pageData = hs.Skip(pageSize * (pageIndex - 1)).Take(pageSize);//這里也是延遲加載,數據庫此時不操作
FeedBackManageList.DataSource = pageData;//這里才正式加載數據,僅僅向數據庫發出請求30條記錄SQL
FeedBackManageList.DataBind();
PageNavigator1.RecordCount = rowCount;// 給分頁控件一些數據
PageNavigator1.PageCount = pageCount;//給分頁控件一些數據
PageNavigator1.PageIndex = pageIndex;//給分頁控件一些數據
}


接下來是關鍵部分,組合條件,注意這里,我們用到了第一步中定義好的組合類:

復制代碼 代碼如下:


private void GetCondition(ref Expression<Func<FeedBack, bool>> expr) {
int isLock = Int32.Parse(ddlIsLock.SelectedValue);
if (isLock > -1)
{
expr = expr.And(c => (c.IsLock == isLock));//一次組合
}
string keyword = tbxKeyword.Text.FilterInjectStr();
if (!keyword.IsNullOrEmpty())
{
expr = expr.And(c => (c.HotelName.IndexOf(keyword) > -1)); //二次組合
}
}


到此,我們已經完成了linq to Sql多條件組合查詢,并且對數據庫的請求做到最小化.
另外,要特別說明的是:對數據源的任何操作,最好用延遲加載,否則,將有可能加載全部數據,
例如,我們寫這樣的代碼:List<FeedBack> fbs = hm.AllFeedBacks.Where(c=>c.Id > 1000).ToList();這樣消耗將會非常嚴重!因為這里會將FeedBack表所有數據全部加載進來!所以,千萬要慎用這種寫法.

總結:微軟的linq to sql給我們帶來便利的同時,也埋下許多的隱患,比如給像我這樣的偷懶者更多便利,但卻不去思考,往往一不小心就加載了數據,造成了資源的浪費.在享受這些便利的同時,應注意適時地進行研究,以讓它們更好地為我們服務.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩电影免费在线观看| 日韩成人在线视频网站| 欧美午夜片在线免费观看| 在线看福利67194| 91po在线观看91精品国产性色| 尤物九九久久国产精品的分类| 欧美久久精品午夜青青大伊人| 狠狠躁18三区二区一区| 日韩国产欧美区| 国产精品美女主播| 日韩最新中文字幕电影免费看| 亚洲欧美一区二区精品久久久| 九色精品免费永久在线| 欧美在线视频一二三| 中文字幕精品一区二区精品| 欧美性受xxxx黑人猛交| 亚洲免费影视第一页| 国产偷亚洲偷欧美偷精品| 欧美大片va欧美在线播放| 亚洲成人a**站| 不卡av电影在线观看| 亚洲精品在线91| 欧美日韩国产123| 成人在线视频网| 91精品成人久久| 98午夜经典影视| 日韩av电影手机在线| 国产精品ⅴa在线观看h| 国产精品白丝jk喷水视频一区| 国产亚洲精品va在线观看| 91深夜福利视频| 日本最新高清不卡中文字幕| 久久久久久久久久av| 精品久久久国产精品999| 日韩精品在线观看网站| 在线看日韩欧美| 欧美性感美女h网站在线观看免费| 69av在线播放| 久久综合88中文色鬼| 日韩一区二区av| 亚洲欧美激情四射在线日| 欧美做受高潮电影o| 国产美女精品视频免费观看| 最新中文字幕亚洲| 俺也去精品视频在线观看| 在线精品国产成人综合| 高清一区二区三区四区五区| 91亚洲精华国产精华| 欧美与黑人午夜性猛交久久久| 亚洲级视频在线观看免费1级| 久久久日本电影| 国产精品免费在线免费| 久久99久久久久久久噜噜| 中文字幕自拍vr一区二区三区| 久久天天躁日日躁| 97在线免费视频| 亚洲人成网7777777国产| 一区国产精品视频| 91久久国产综合久久91精品网站| 欧美性精品220| 正在播放欧美视频| 国产精品私拍pans大尺度在线| 国产亚洲精品久久久久动| 欧美中文在线视频| 欧美主播福利视频| 亚洲第一色中文字幕| 成人看片人aa| 国产精品亚发布| 成人写真视频福利网| 成人日韩av在线| 国产成人精品免费视频| 国产福利精品在线| 日韩美女视频中文字幕| 日韩中文字幕在线播放| 欧美黑人xxxⅹ高潮交| 午夜精品久久久久久久久久久久久| 亚洲乱码国产乱码精品精| 毛片精品免费在线观看| 国产精国产精品| 久久人人爽人人爽人人片av高请| 欧美性黄网官网| 国产999精品视频| 久久久久久国产| 国产精品美女无圣光视频| 亚洲精品免费网站| 久久精品国产精品亚洲| 一区二区在线免费视频| 国产精品狼人色视频一区| 久久av红桃一区二区小说| 欧美在线影院在线视频| 亚洲女成人图区| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲一区二区日本| 国产亚洲欧美视频| 亚洲免费影视第一页| 亚洲欧美日韩在线高清直播| 日韩国产高清污视频在线观看| 最近中文字幕mv在线一区二区三区四区| 在线亚洲男人天堂| 午夜精品国产精品大乳美女| 亚洲乱码国产乱码精品精| 久久夜色精品亚洲噜噜国产mv| 亚洲美女精品久久| 日韩成人激情在线| 亚洲第一色在线| 国产精品91久久久久久| 欧美视频专区一二在线观看| 久久久久中文字幕| 78m国产成人精品视频| 亚洲欧美综合v| 热久久视久久精品18亚洲精品| 欧美放荡办公室videos4k| 亚洲精品成人久久电影| 永久免费毛片在线播放不卡| 色视频www在线播放国产成人| 久久综合久久美利坚合众国| 91精品久久久久久久久久入口| 91久久久久久久一区二区| 91深夜福利视频| 欧美色视频日本高清在线观看| 这里只有精品久久| 少妇高潮久久77777| 成人黄色激情网| 欧美大片在线看免费观看| 日韩精品免费在线视频| 日本不卡视频在线播放| 国内免费精品永久在线视频| 国产日韩在线看| 96精品久久久久中文字幕| 国产在线拍揄自揄视频不卡99| 国产精品偷伦一区二区| 久久久久久久国产精品视频| 国产精品www网站| 久久这里只有精品视频首页| 91欧美精品午夜性色福利在线| 亚洲一区二区中文| 在线观看视频99| 久久久av亚洲男天堂| 91在线视频导航| 精品亚洲一区二区三区在线播放| 精品国产乱码久久久久酒店| 日韩中文字幕不卡视频| 欧美日韩在线视频一区| 国产成人综合久久| 久久久电影免费观看完整版| 精品视频久久久久久久| 国产91精品久久久久久久| 欧美黑人性视频| 亚洲影院色在线观看免费| 性日韩欧美在线视频| 日韩av在线资源| 亚洲色图美腿丝袜| 亚洲欧洲国产精品| 亚洲精品国产欧美| 欧美性极品xxxx娇小| 久久精品男人天堂| 国产日韩欧美影视| 亚洲国语精品自产拍在线观看| 欧美在线视频在线播放完整版免费观看| 亚洲一区二区三区成人在线视频精品| 国产日韩在线精品av| 北条麻妃久久精品| 亚洲第一色在线| 热re91久久精品国99热蜜臀|