LINQ from子句进行复合查询实现方法
创始人
2024-05-05 21:10:51
0

LINQ from子句是比较常见的语句,通常是作为查询中的重要部分。本文将要介绍的是LINQ from字句进行复核查询。

1.用LINQ from子句进行复核查询

  1. using System;  
  2. using System.Linq;  
  3.  
  4. namespace ConsoleApplication1  
  5. {  
  6.     class Program  
  7.     {  
  8.         static void Main(string[] args)  
  9.         {  
  10.             int[] intAry1 = { 2,3,4,5,6,77};  
  11.             int[] intAry2 = { 2,4,4,345,45,34,23,324,243,423,213343};  
  12.             var query1 = from var1 in intAry1  
  13.                          from var2 in intAry2  
  14.                          where var1 % var2 == 0  
  15.                          group var2 by var2;  
  16.             foreach (var grp in query1)  
  17.             {  
  18.                 Console.WriteLine("{0}", grp.Key);  
  19.                 foreach (var item in grp)  
  20.                 {  
  21.                     Console.WriteLine("{0}",item);  
  22.                 }  
  23.                 Console.WriteLine();  
  24.             }  
  25.         }  
  26.     }  

from子句查询结果

2.用join子句进行内部联接

内部联接中join子句的格式如下所示:

join element in dataSource on exp1 equals exp2

其中,dataSource表示数据源,它是联接要使用的第二个数据集。element表示存储dataSource中元素的本地变量。exp1和exp2表示两个表达式,它们具有相同的数据类型,可以用equals进行比较。如果exp1和exp2相等,则当前的元素将添加到查询结果。

  1. using System;  
  2. using System.Linq;  
  3.  
  4. namespace ConsoleApplication2  
  5. {  
  6.     class Program  
  7.     {  
  8.         static void Main(string[] args)  
  9.         {  
  10.             int[] intAry1 = { 5, 15, 25, 30,40,50,60,70, };  
  11.             int[] intAry2 = { 10, 20, 30, 40, 50, 60 };  
  12.             var query1 = from val1 in intAry1  
  13.                          join val2 in intAry2 on val1 equals val2  
  14.                          select new { Val1 = val1, Val2 = val2 };  
  15.             foreach (var item in query1)  
  16.             {  
  17.                 Console.WriteLine(item);  
  18.             }  
  19.         }  
  20.     }  

join子句查询结果

3.用join子句进行分组联接

有时候需要将查询结果按照***个数据集中的元素进行分组,这就需要使用join子句的另外一种用法--分组联接。

join element in dataSource on exp1 equals exp2 into grpName

其中,into关键字表示将这些数据分组并保存到grpName中,grpName是保存一组数据的集合。

  1. using System;  
  2. using System.Linq;  
  3.  
  4. namespace ConsoleApplication2  
  5. {  
  6.     class Program  
  7.     {  
  8.         static void Main(string[] args)  
  9.         {  
  10.             int[] intAry1 = { 5, 15, 25, 30,40,50,60,70, };  
  11.             int[] intAry2 = { 10, 20, 30, 40, 50, 60 };  
  12.             var query1 = from val1 in intAry1  
  13.                          join val2 in intAry2 on val1 equals val2 into valGrp  
  14.                          select new { Val1 = val1, Val2 = valGrp };  
  15.             foreach (var obj in query1)  
  16.             {  
  17.                 Console.WriteLine("{0}",obj.Val1);  
  18.                 foreach (var item in obj.Val2)  
  19.                 {  
  20.                     Console.WriteLine("{0}", item);  
  21.                 }  
  22.                 Console.WriteLine();  
  23.             }  
  24.         }  
  25.     }  

分组联接结果

4.用join子句进行左外部联接

第三种联接是左外部联接,它返回***个集合中的所有元素,无论它是否在第二个集合中有相关元素。

在LINQ中,通过对分组联接的结果调用DefaultIfEmpty()来执行左外部联接。DefaultIfEmpty()方法从列表中获取指定元素。如果列表为空,则返回默认值。

  1. using System;  
  2. using System.Linq;  
  3.  
  4. namespace ConsoleApplication2  
  5. {  
  6.     class Program  
  7.     {  
  8.         static void Main(string[] args)  
  9.         {  
  10.             int[] intAry1 = { 5, 15, 25, 30,40,50,60,70, };  
  11.             int[] intAry2 = { 10, 20, 30, 40, 50, 60,40,6,2345,23 };  
  12.             var query1 = from val1 in intAry1  
  13.                          join val2 in intAry2 on val1 equals val2 into valGrp  
  14.                          from grp in valGrp.DefaultIfEmpty()  
  15.                          select new {Val1 = val1,Val2 = grp};  
  16.             foreach (var item in query1)  
  17.             {  
  18.                 Console.WriteLine("{0}",item);  
  19.             }  
  20.         }  
  21.     }  

左外部联接结果

LINQ from子句注意

左外部联接和分组联接虽然相似但是并不一样。分组联接返回的查询结果是一种分层数据结构,需要使用两层foreach()才能遍历它的结果。而左外部联接是在分组联接的查询结果上再进行一次查询,所以它在join之后还有一个from子句进行查询。

本文来自Kevin博客园博文《用from子句进行复合查询与join子句进行连接

【编辑推荐】

  1. LINQ和ADO.NET技术概述
  2. LINQ查询的目的与实现手段
  3. LINQ基础概念总结
  4. LINQ查询表达式功能详解
  5. ADO.NET中的多数据表操作读取

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...