中成网站建设
    成都做网站,就选中成网站建设!专业四川网站建设,成都网站建设服务提供商
            企业宣传网站建设、电子商务网站建设、OA办公系统。联系电话:028-66165255
    资讯列表  
 ASP.NET防止用户多次登录的方法…
 生成不重复的随机整数
 ASP.NET获取IP的6种方法
 ASP dot net 里的状态管理-Ses…
 判断获取的参数是否为null
 中文验证码生成实例
 微软发布第二个实验版的.Net 4…
 微软轻量级Web开发平台WebMatr…
 asp.net 生成图片验证码
 Asp.net直接保存文件到客户端
 .Net开发中的多线程编程总结
 C#中关于get和set的详细例子介…
 ASP.NET编程技巧:提高asp.net…
 asp.net 剪切 缩小图片原码
 截断过长字符串为省略号算法
    资讯详情  
LINQ from子句进行复合查询实现方法
发布时间:2009-08-27                  来源:成都网站建设--中成网建         【加入收藏】

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子句进行查询。

 

 

 
上一篇:微软就Word禁售案提起上诉 称判决流程有误
下一篇:快速掌握删除Oracle 10g垃圾表的好方法
【打印】    【关闭】    【字体变小】    【字体变大】

友情链接

首页  |  建站学院  |  网站建设  |  成功案例  |  业务体系  |  软件定制  |  解决方案  |  联系我们  |  免责声明
中成网建公司地址:四川省成都市双楠双安东巷1号18-3-5 电话:028-6616 5255 版权所有 @ 中成网建
成都网站建设网址:www.csccd.net www.csccd.cn 邮箱:web#csccd.net
信息产业部备案号:蜀ICP备08106559号