日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
LINQ模糊查詢應用實例分析

LINQ模糊查詢的應用是LINQ學習的一個重要部分,lambada的靈活使用使得我們的程序可控性以及簡約性變得很好,那么對于LINQ模糊查詢的學習我們會碰到什么問題呢?讓我們來看看具體的一些問題。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,龍沙企業(yè)網(wǎng)站建設,龍沙品牌網(wǎng)站建設,網(wǎng)站定制,龍沙網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,龍沙網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

LINQ模糊查詢的問題:LINQ TO SQL中的like怎么實現(xiàn)?

有人說:我用SqlMethods,例:

 
 
 
  1. var query = from c in LQDC.Customers
  2.   where SqlMethods.Like(c.City, "L_n%")
  3. select c; 

可是問題依舊,假如我用的是通用字段模糊查詢呢?例如我一個下拉列表里有所有的字段名,那么客戶選擇下拉列表是隨機的,那我不是要

 
 
 
  1. switch(item){ 
  2. case "city": 
  3. ... 
  4. break; 
  5. case "name": 
  6. ... 
  7. break; 

有幾個字段就寫幾個case。那么有人用LINQ的目的是什么,提高開發(fā)效率,減少開發(fā)時間,而且LINQ的反射也不是一般人隨便就寫得出來的。

LINQ模糊查詢的解決方案:

LINQ模糊查詢思路1、通過直接執(zhí)行查詢語句

這也是LINQ的老爸估計想到目前LINQ不完善而專門留下來的絕招:

 
 
 
  1. LinQDataContext LQDC = new LinQDataContext(); 
  2. LQDC.ExecuteQuery("select * from table where item like %ak47%"); 

這里順帶提醒大家%ak47%是會丟失數(shù)據(jù)庫索引的,而ak47%則不會,要怎么解決想想博客,這里就不扯那么遠啦。

LINQ模糊查詢思路2、調(diào)用存儲過程。

寫好一個存儲過程,例如名稱叫p_LikeSelect;

 
 
 
  1. ALTER PROCEDURE [dbo].[p_LikeSelect]
  2.   @tablename nvarchar(255),
  3.   @columnname nvarchar(255),
  4. @value nvarchar(255)
  5. AS
  6. BEGIN
  7. set nocount on;
  8. declare @sqlcommand nvarchar(max);
  9. set @sqlcommand = 'select * from '+
  10. @tablename+' where.....(后面自己寫啦)
  11. exec sp_executesql @sqlcommand ;
  12. END

但是問題又來啦,當你把這個存儲過程通過服務器資源管理器拖進dbml窗口以后,看看里面的返回值,我靠,不管你是左拖還是右拖上拖下拖,反正拖死你還是返回int,NND,你不能智能點嗎?造成的原因是存儲過程結(jié)尾用了exec,但是你要實現(xiàn)動態(tài)拼接字符串必須用exec,懂的朋友都知道(所以如果你結(jié)尾是select...什么的,它才可以識別出一個ISingleResult﹤T﹥或IMultipleResults﹤T﹥的返回類型,然后通過屬性修改器把它返回值手動修改成IQueryable﹤Customers﹥這樣才能最終被使用和保存)。

沒辦法,那只好手動強行修改dbml下的linq.designer.cs文件,打開找到

 
 
 
  1.   [Function(Name="dbo.p_LikeSelect")]
  2.   public int p_TYSelect(
  3. [Parameter(DbType="NVarChar(255)")] 
  4. string tablename, [Parameter(DbType=
  5. "NVarChar(255)")] string @columnname.......)
  6.   {
  7.    IExecuteResult result = this.ExecuteMethodCall(
  8. this, ((MethodInfo)(MethodInfo.GetCurrentMethod())),
  9.  tablename, diskname);
  10.    return ((int)(result.ReturnValue));
  11.   } 

把里面所有類型int全部修改成IQueryable﹤Customers﹥?nèi)缦拢?/p>

 
 
 
  1.   [Function(Name="dbo.p_LikeSelect")]
  2.   public IQueryable﹤Customers﹥ p_TYSelect(
  3. [Parameter(DbType="NVarChar(255)")] 
  4. string tablename, 
  5. [Parameter(DbType="NVarChar(255)")] 
  6. string @columnname.......)
  7.   {
  8.    IExecuteResult result = this.ExecuteMethodCall(
  9. this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), 
  10. tablename, diskname);
  11.    return ((IQueryable﹤Customers﹥)
  12. (result.ReturnValue));
  13.   } 

嘔,擦了一把汗,可是,神種是喜歡作弄人,當你再次修改dbml文件的時候,所有代碼又被重新覆蓋了,所以目前我最討厭LINQ的另外一個原因就在此了。真想罵它!這就意味著只要你系統(tǒng)沒有完成你就別想該dbml文件。。。費。

LINQ模糊查詢思路3、使用現(xiàn)成的程序

從網(wǎng)上下載了DynamicLibrary.cs或叫Dynamic.cs的,大小越70-80KB左右,using System.Linq.Dynamic; //using一下。ok,開始有搞頭啦。舉個例子,所有字段item和查詢的值value都可以動態(tài)啦,下面我截取了一段我項目中的使用(寫得不好不要打我呀)

 
 
 
  1. if (selectnum == 0) {
  2. IQ = LQDC.Transport_Inner;
  3. } else {
  4. switch (type) {
  5. case "精確":
  6. if (itemtype == "tree" || itemtype == "specialtext") {
  7. IQ = LQDC.Transport_Inner.Where(item + "=@0", value);
  8. } else if (itemtype == "bit") {
  9. IQ = LQDC.Transport_Inner.Where(
  10. item + "=@0", Convert.ToBoolean(value));
  11. } else if (itemtype == "text") {
  12. if (!value.Trim().Equals("")) {
  13. IQ = LQDC.Transport_Inner.Where(
  14. item + "=@0", double.Parse(value));
  15. } else {
  16. IQ = LQDC.Transport_Inner.Where(item + "=null");
  17. }
  18. } else {
  19. IQ = LQDC.Transport_Inner.Where(item + "﹥=
  20. @0 and " + item + "﹤@1", date1.Date, date2.Date);
  21. }
  22. break;
  23. case "模糊":
  24. StringBuilder sb = new StringBuilder();
  25. IQ = LQDC.Transport_Inner.Where(@"BackNum.Contains(""000147"")");
  26. break;
  27. }

動態(tài)的內(nèi)容都在“精確”里面的Where里,大家應該很容易看懂(還包括動態(tài)時間的比較)精華在最后“模糊”那,你可以通過查詢LINQ生成的SQL語句得到:

 
 
 
  1. SELECT * FROM [dbo].[Transport_Inner] AS [t0]
  2. WHERE [t0].[BackNum] LIKE @p0 

類似于匹配以000147開頭的或是中間的或是結(jié)尾的,類似%000147%嘿嘿。還有假如用到sql中的new id()這個隨機查詢一個記錄,怎么辦?LINQ中也沒有呀,同樣得用到Dynamic.cs。好了使用起來也很方便,如下,查詢ID﹥5并小于100的隨即5條記錄。

 
 
 
  1. var query = 
  2. LQDC.Transport_Inner.Where(
  3. "ID﹥@0 and ID﹤@1", 5, 100).Select("new(id)").Take(5) 

當然,這只能返回IQueryable而非IQueryable﹤T﹥

原文來自CSDN博客:http://blog.csdn.net/alamiye010/archive/2009/03/02/3950597.aspx

LINQ模糊查詢的相關內(nèi)容就向你介紹到這里,希望對你了解和學習LINQ模糊查詢有所幫助。


當前題目:LINQ模糊查詢應用實例分析
本文網(wǎng)址:http://m.5511xx.com/article/dhsdcdc.html