Ϊʲô˵LINQҪʤ¹ýSQL£¿
×÷Õߣºlinqpad ·¢²¼Ê±¼ä£º[ 2017/3/21 10:36:39 ] ÍƼö±êÇ©£ºSQL Êý¾Ý¿â LINQ
¡¡¡¡LINQ »¹Í¨¹ýÒ»×é·á¸»µÄ²Ù×÷·û¶ÔƽÃæÍâÁªºÏ¡¢×ÔÁªºÏ¡¢×é²éѯÒÔ¼°ÆäËü¸÷ÖÖ²»Í¬ÀàÐͲéѯ½øÐÐÁËÖ§³Ö¡£
¡¡¡¡²ÎÊý»¯
¡¡¡¡Èç¹ûÎÒÃÇÏëÒª½«Ö®Ç°µÄÀý×Ó²ÎÊý»¯»áÈçºÎÄØ£¬Èç´Ë”WA”״̬ÊDz»ÊÇÒªÀ´×ÔÓÚÒ»¸ö±äÁ¿ÄØ? ÆäʵÎÒÃÇÖ»ÒªÏñÏÂÃæÕâÑù×ö¿ÉÒÔÁË:
¡¡¡¡string state = "WA";
¡¡¡¡var query =
¡¡¡¡from c in db.Customers
¡¡¡¡where c.Address.State == state
¡¡¡¡...
¡¡¡¡²»»á»ìÏý DbCommand ¶ÔÏóÉÏÃæµÄ²ÎÊý£¬»òÕßµ£ÐÄ SQL ×¢Èë¹¥»÷¡£ LINQ µÄ²ÎÊý»¯ÊÇÄÚÁª¡¢ÀàÐÍ°²È«²¢ÇҸ߶ȿɶÁµÄ¡£Ëü²»½ö½â¾öÁËÎÊÌâ——¶øÇÒ½â¾öµÃºÜ²»´í¡£
¡¡¡¡ÒòΪ LINQ ²éѯʱ¿ÉÒÔ½øÐÐ×éºÏ£¬ËùÒÔÎÒÃÇ¿ÉÒÔÓÐÌõ¼þµÄÌí¼Óν´Ê¡£ÀýÈ磬ÎÒÃÇд³öÒ»¸ö·½·¨£¬ÈçÏ£º
¡¡¡¡IQueryable GetCustomers (string state£¬ decimal? minPurchase)
¡¡¡¡{
¡¡¡¡var query = Customers.AsQueryable();
¡¡¡¡if (state != null)
¡¡¡¡query = query.Where (c => c.Address.State == state);
¡¡¡¡if (minPurchase != null)
¡¡¡¡query = query.Where (c => c.Purchases.Any (p => p.Price > minPurchase.Value));
¡¡¡¡return query;
¡¡¡¡}
¡¡¡¡Èç¹ûÎÒÃÇʹÓÃ¿ÕµÄ state ÒÔ¼° minPurchase Öµµ÷ÓÃÁËÕâ¸ö·½·¨£¬ÄÇôÔÚÎÒÃÇö¾Ù½á¹û¼¯µÄʱºòÈçÏ SQL »á±»Éú³É³öÀ´£º
¡¡¡¡SELECT [t0].[ID]£¬ [t0].[Name]£¬ [t0].[AddressID]
¡¡¡¡FROM [Customer] AS [t0]
¡¡¡¡²»¹ý£¬Èç¹ûÎÒÃÇÖ¸¶¨ÁË state ºÍ minPurchase µÄÖµ£¬LINQ µ½ SQL ²»Ö»ÊÇÏò²éѯÌí¼ÓÁËν´Ê£¬»¹»áÓбØÒªµÄÁªºÏÓï¾ä£º
¡¡¡¡SELECT [t0].[ID]£¬ [t0].[Name]£¬ [t0].[AddressID]
¡¡¡¡FROM [Customer] AS [t0]
¡¡¡¡LEFT OUTER JOIN [Address] AS [t1] ON [t1].[ID] = [t0].[AddressID]
¡¡¡¡WHERE (EXISTS(
¡¡¡¡SELECT NULL AS [EMPTY]
¡¡¡¡FROM [Purchase] AS [t2]
¡¡¡¡WHERE ([t2].[Price] > @p0) AND ([t2].[CustomerID] = [t0].[ID])
¡¡¡¡)) AND ([t1].[State] = @p1)
¡¡¡¡ÒòΪÎÒÃǵķ½·¨·µ»ØÁËÒ»¸ö IQueryable£¬²éѯÔÚö¾Ùµ½Ö®Ç°²¢²»»á±»Êµ¼ÊµØת»»³É SQL ²¢¼ÓÒÔÖ´ÐС£ÕâÑù¸øÁ˵÷ÓýøÒ»²½Ìí¼Óν´Ê¡¢·ÖÒ³¡¢×Ô¶¨ÒåͶӰµÈµÈµÄ»ú»á¡£
¡¡¡¡¾²Ì¬ÀàÐÍ°²È«
¡¡¡¡ÔÚ֮ǰµÄ²éѯÖУ¬Èç¹ûÎÒÃǽ« state ±äÁ¿ÉùÃ÷³ÉÁËÒ»¸öÕûÐÍÊý¶ø²»ÊÇÒ»¸ö×Ö·û´®£¬ÄÇô²éѯ¿ÉÄÜÔÚ±àÒëʱ»á±¨´í£¬¶ø²»Óõȵ½ÔËÐÐʱ¡£Õâ¸öҲͬÑùÊÊÓÃÓڰѱíÃû»òÕßÁÐÃûŪ´íµÄÇé¿ö¡£ÕâÔÚÖع¹Ê±ÓÐÒ»¸öºÜʵÔڵĺô¦£ºÈç¹ûÄãûÓÐÍê³ÉÊÖÍ·µÄ¹¤×÷£¬±àÒëÆ÷»á¸ø³öÌáʾ¡£
¡¡¡¡¿Í»§¶Ë´¦Àí
¡¡¡¡LINQ ÈÃÄã¿ÉÒÔÇáËɵؽ«²éѯµÄһЩ²¿·ÖתÒƵ½¿Í»§¶ËÉϽøÐд¦Àí¡£¶ÔÓÚ¸ºÔظºµ£½Ï´óµÄÊý¾Ý¿â·þÎñÆ÷£¬ÕâÑù×ö¿Éʵ¼ÊÌáÉýÐÔÄÜ¡£Ö»ÒªÄãËùÈ¡Êý¾ÝûÓг¬¹ýËùÐ裨»»ÑÔÖ®£¬Ä㻹ÊÇÒªÔÚ·þÎñÆ÷ÉÏ×ö¹ýÂË£©£¬¿ÉÒÔ¾³£ÐÔµØͨ¹ý°Ñ¶Ô½á¹û¼¯½øÐÐÖØÐÂÅÅÐò¡¢×ª»»ÒÔ¼°ÖØ×éµÄѹÁ¦×ªÒƵ½¸ºÔؽÏÉÙµÄÓ¦Ó÷þÎñÆ÷ÉÏÈ¥¡£Ê¹Óà LINQ£¬ÄãÐèÒª×öµÄÊÇ AsEnumerable() תÒƵ½²éѯ֮ÖУ¬¶ø×ÔÄǸöµãÖ®ºóµÄËùÓÐÊÂÇ鶼¿ÉÒÔÔÚ±¾µØÖ´ÐС£
¡¡¡¡Ê²Ã´Ê±ºò²»Óà LINQ È¥²éѯÊý¾Ý¿â
¡¡¡¡¾¡¹Ü LINQ µÄ¹¦ÄÜÇ¿´ó£¬µ«ÊÇËü²¢²»ÄÜÈ¡´ú SQL¡£Ëü¿ÉÒÔÂú×ã 95% ÒÔÉϵÄÐèÇ󣬲»¹ýÄãÓÐʱÈÔÈ»ÐèÒªSQL:
¡¡¡¡· ÐèÒªÊÖ¶¯µ÷ÕûµÄ²éѯ (ÌØÊâÊÇÐèÒªÓÅ»¯ºÍ½øÐÐËø¶¨ÌáʾµÄʱºò)£»
¡¡¡¡· ÓÐЩÉæ¼°µ½Òª select ÁÙʱ±í£¬È»ºóÓÖÒª¶ÔÄÇЩ±í½øÐвéѯ²Ù×÷µÄ²éѯ£»
¡¡¡¡· Ô¤ÖªµÄ¸üÐÂÒÔ¼°ÅúÁ¿²åÈë²Ù×÷¡£
¡¡¡¡»¹ÓÐÔÚÓõ½´¥·¢Æ÷ʱ£¬Ä㻹ÊÇÐèÒª SQL¡£ (¾¡¹ÜÔÚʹÓà LINQ µÄʱºòÖîÈç´ËÀàµÄ¶«Î÷²¢·Ç³£³£±»ÐèÒª£¬µ«ÔÚҪʹÓô洢¹ý³ÌºÍº¯ÊýµÄʱºò£¬SQL ÊDz»¿É»òȱµÄ)¡£Äã¿ÉÒÔͨ¹ýÔÚ SQL Öбàд±íÖµº¯ÊýÀ´½« SQL Óë LINQ ½áºÏÔÚÒ»Æ𣬠ȻºóÔÚ¸ü¼Ó¸´Ô LINQ ²éѯÀïÃæµ÷ÓÃÕâЩº¯Êý¡£
¡¡¡¡Á˽âÁ½ÃŲéѯÓïÑÔ²¢²»ÊÇÎÊÌ⣬ÒòΪÎÞÂÛÈçºÎÄ㶼»áÏëҪȥѧϰ LINQ µÄ — LINQ ÔÚ²éѯ±¾µØ¼¯ºÏÒÔ¼° XML DOM µÄʱºò·Ç³£ÊµÓá£Èç¹ûÄãʹÓõÄÈÔÈ»ÊÇÀϾɵĻùÓÚ XmlDocument µÄ DOM£¬LINQ to XML µÄ DOM ²Ù×÷»áÊÇÒ»ÖÖ¾ßÓÐÏ·¾çЧ¹ûµÄ½ø²½¡£
¡¡¡¡»¹ÓÐÊÇÏà±ÈÓÚ SQL£¬ LINQ ¸üÒ×ÓÚÕÆÎÕ£¬ËùÒÔÈç¹ûÄãÏëд¸ö²»´íµÄ²éѯ£¬Ê¹Óà LINQ »á±È SQL ¸üºÃ´ï³É¡£
¡¡¡¡½« LINQ ÓÃÓÚʵս
¡¡¡¡ÎÒ¼¸ºõÊÇÖ»Óà LINQ À´×öÊý¾Ý¿â²éѯ£¬ÒòΪËü¸üÓÐЧÂÊ¡£
¡¡¡¡¶ÔÓÚÓ¦ÓóÌÐòµÄ±àд¶øÑÔ£¬ÎҵĸöÈ˾ÑéÊÇÒ»¸öʹÓà LINQ µÄÊý¾Ý·ÃÎʲ㣨ʹÓÃÒ»¸öÏñ LINQ µ½ SQL »òÕß Entity Framework µÄ API£©¿ÉÒÔ½«Êý¾Ý·ÃÎʵĿª·¢Ê±¼ä¿³µôÒ»°ë£¬¶øÇÒ¿ÉÒÔÈÃά»¤¹¤×÷¸ü¼ÓµÄÇáËÉ¡£
±¾ÎÄÄÚÈݲ»ÓÃÓÚÉÌҵĿµÄ£¬ÈçÉ漰֪ʶ²úȨÎÊÌ⣬ÇëȨÀûÈËÁªÏµSPASVOС±à(021-61079698-8054)£¬ÎÒÃǽ«Á¢¼´´¦Àí£¬ÂíÉÏɾ³ý¡£
Ïà¹ØÍƼö
ÔÚ²âÊÔÊý¾Ý¿âÐÔÄÜʱ£¬ÐèҪעÒâÄÄЩ·½ÃæµÄÄÚÈÝ£¿²âÊÔ¹ÜÀí¹¤¾ßTCÊý¾Ý¿â±¨´íµÄÔÒòÓÐÄÄЩ£¿Ôõô½â¾ö£¿Êý¾Ý¿âµÄÈý´ó·¶Ê½ÒÔ¼°Îå´óÔ¼Êø±à³Ì³£Óõļ¸ÖÖʱ¼ä´Áת»»(java .net Êý¾Ý¿â)ÓÅ»¯mysqlÊý¾Ý¿âµÄ¼¸¸ö²½ÖèÊý¾Ý¿â²¢ÐжÁÈ¡ºÍдÈëÖ®PythonʵÏÖÉîÈëÀí½âÊý¾Ý¿â(DB2)»º³å³Ø£¨BufferPool£©¹úÄÚÈý´óÔÆÊý¾Ý¿â²âÊÔ¶Ô±ÈÔ¤¾¯¼´Ô¤·À£º6´ó³£¼ûÊý¾Ý¿â°²È«Â©¶´Êý¾Ý¿â¹æ»®¡¢Éè¼ÆÓë¹ÜÀíÊý¾Ý¿â-ÊÂÎñµÄ¸ÅÄîSQL ServerÐÞ¸ÄÊý¾Ý¿âÎïÀíÎļþ´æÔÚλÖÃʹÓÃPHPÓëSQL´î½¨¿ÉËÑË÷µÄ¼ÓÃÜÊý¾Ý¿âÓÃPythonдһ¸öNoSQLÊý¾Ý¿âÏêÊö SQL ÖеÄÊý¾Ý¿â²Ù×÷ÏêÊö SQL ÖеÄÊý¾Ý¿â²Ù×÷JavaÃæÊÔ×¼±¸:Êý¾Ý¿âMySQLÐÔÄÜÓÅ»¯
¸üз¢²¼
¹¦ÄܲâÊԺͽӿڲâÊÔµÄÇø±ð
2023/3/23 14:23:39ÈçºÎдºÃ²âÊÔÓÃÀýÎĵµ
2023/3/22 16:17:39³£ÓõÄÑ¡Ôñ»Ø¹é²âÊԵķ½Ê½ÓÐÄÄЩ£¿
2022/6/14 16:14:27²âÊÔÁ÷³ÌÖÐÐèÒªÖصã°Ñ¹Ø¼¸¸ö¹ý³Ì£¿
2021/10/18 15:37:44ÐÔÄܲâÊÔµÄÆßÖÖ·½·¨
2021/9/17 15:19:29È«Á´Â·Ñ¹²âÓÅ»¯Ë¼Â·
2021/9/14 15:42:25ÐÔÄܲâÊÔÁ÷³Ìdz̸
2021/5/28 17:25:47³£¼ûµÄAPPÐÔÄܲâÊÔÖ¸±ê
2021/5/8 17:01:11ÈÈÃÅÎÄÕÂ
³£¼ûµÄÒƶ¯App Bug??±ÀÀ£µÄ²âÊÔÓÃÀýÉè¼ÆÈçºÎÓÃJmeter×öѹÁ¦²âÊÔQCʹÓÃ˵Ã÷APPѹÁ¦²âÊÔÈëÃŽ̳ÌÒƶ¯app²âÊÔÖеÄÖ÷ÒªÎÊÌâjenkins+testng+ant+webdriver³ÖÐø¼¯³É²âÊÔʹÓÃJMeter½øÐÐHTTP¸ºÔزâÊÔSelenium 2.0 WebDriver ʹÓÃÖ¸ÄÏ