LINQ查询表达式---------from子句

LINQ的查询由3基本部分组成:获取数据源,创建查询,执行查询

//1、获取数据源
List<int> scores = new List<int> { , , , , , }; //创建查询
var scoreeQuery =
from score in scores
where score >
select score; //3、执行查询
foreach (int i in scoreeQuery)
{
Console.WriteLine("{0}", i);
}

1.1 单个from子句

string[] values = { "张三", "李四", "王五", "大王", "小王" };
//查询所有包含“王”字的字符串
var valuesQuery = from v in values
where v.IndexOf("王") > -
select v;
foreach (string s in valuesQuery)
{
Console.WriteLine(s);
}
输出结果:
王五
大王
小王
在这个LINQ表达式的from子句中,v叫做范围变量,values是数据源。v的作用域存在于当前的LINQ表达式,表达式以外不能访问这个变量。where用来筛选元素,select用于输出元素。

1.2 复合from子句

public void ExpDemo()
{
List<PerInfo> listPer = new List<PerInfo>
{
new PerInfo{
Name = "小白",
Age = ,
Tel = new List<string>{"1535010****", "153****8523"}
},
new PerInfo{
Name = "小新",
Age = ,
Tel = new List<string>{"1330708****", "1330709****"}
},
new PerInfo{
Name = "小军",
Age = ,
Tel = new List<string>{"1380524****", "1380525****"}
}
}; var query = from PerInfo p in listPer
from listTel in p.Tel
where listTel.IndexOf("1535010****") > -
select p; foreach (var q in query)
{
Console.WriteLine("姓名:{0};年龄:{1}", q.Name, q.Age);
foreach (var tel in q.Tel)
{
Console.WriteLine("电话:{0}", tel);
}
}
} public class PerInfo
{
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
public List<string> Tel
{
get;
set;
}
}
输出结果:
姓名:小白;年龄:19
电话:1535010****
电话:153****8523 
在查询数据源中,属性是一个集合时,可以使用复合from子句对这个属性集合查询。比如,一个人,可能有多个手机号。

1.3 多个from子句连接 

static void Main(string[] args)
{
//1.3 使用多个from子句执行联结
List<PerInfo> listPer1 = new List<PerInfo>
{
new PerInfo{
Name = "小白",
Age = ,
Tel = new List<string>{"1535010****"}
},
new PerInfo{
Name = "小新",
Age = ,
Tel = new List<string>{"1330708****"}
},
new PerInfo{
Name = "小军",
Age = ,
Tel = new List<string>{"1380524****"}
}
}; List<PerInfo> listPer2 = new List<PerInfo>
{
new PerInfo{
Name = "小日",
Age = ,
Tel = new List<string>{"1535010****"}
},
new PerInfo{
Name = "小月",
Age = ,
Tel = new List<string>{"1330708****"}
},
new PerInfo{
Name = "小明",
Age = ,
Tel = new List<string>{"1380524****"}
}
}; var query1 = from lp1 in listPer1
from lp2 in listPer2
select new { lp1, lp2 }; foreach (var s in query1)
{
Console.WriteLine("{0} {1} ", s.lp1.Name, s.lp2.Name);
} Console.WriteLine("+++++++++++++++++++++++++++++++++++++++++++"); var query2 = from lp1 in listPer1
where lp1.Age >
from lp2 in listPer2
where lp2.Age >
select new{ lp1, lp2}; foreach (var s in query2)
{
Console.WriteLine("{0} {1} ", s.lp1.Name, s.lp2.Name);
} Console.WriteLine("+++++++++++++++++++++++++++++++++++++++++++"); var query3 = from lp1 in listPer1
from lp2 in listPer2
where lp2.Age >
select new{lp1, lp2 }; foreach (var s in query3)
{
Console.WriteLine("{0} {1} ", s.lp1.Name, s.lp2.Name);
} Console.ReadLine();
}
输出结果:
小白 小日
小白 小月
小白 小明
小新 小日
小新 小月
小新 小明
小军 小日
小军 小月
小军 小明
+++++++++++++++++++++++++++++++++++++++++++
小新 小月
小新 小明
小军 小月
小军 小明
+++++++++++++++++++++++++++++++++++++++++++
小白 小月
小白 小明
小新 小月
小新 小明
小军 小月
小军 小明
复合 from 子句用于访问单个数据源中的内部集合。 不过,查询还可以包含多个可从独立数据源生成补充查询的 from 子句。 使用此技术可以执行某些类型的、无法通过使用 join 子句执行的联接操作。

LINQ查询表达式---------from子句的更多相关文章

  1. LINQ查询表达式---------let子句

    LINQ查询表达式---------let子句 let子句创建一个范围变量来存储结果,变量被创建后,不能修改或把其他表达式的结果重新赋值给它.此范围变量可以再后续的LINQ子句中使用. class P ...

  2. LINQ查询表达式---------join子句

    LINQ查询表达式---------join子句 join 子句接受两个源序列作为输入. 每个序列中的元素都必须是可以与另一个序列中的相应属性进行比较的属性,或者包含一个这样的属性. join子句使用 ...

  3. LINQ查询表达式---------orderby子句

    LINQ查询表达式---------orderby子句 LINQ可以按元素的一个或多个属性对元素进行排序. class Program { public class PerInfo { public ...

  4. LINQ查询表达式---------group子句

    LINQ查询表达式---------group子句 LINQ表达式必须以from子句开头,以select或group子句结束.使用guoup子句来返回元素分组后的结果.group 子句返回一个 IGr ...

  5. LINQ查询表达式---------select子句

    LINQ查询表达式---------select子句 1.1常见的select子句查询 class Program { public class PerInfo { public int Id { g ...

  6. LINQ查询表达式---------where子句

    LINQ查询表达式---------where子句 where 子句用在查询表达式中,用于指定将在查询表达式中返回数据源中的哪些元素. 它将一个布尔条件(“谓词”)应用于每个源元素(由范围变量引用), ...

  7. 2.3 LINQ查询表达式中 使用select子句 指定目标数据

    本篇讲解LINQ查询的三种形式: 查询对象 自定义查询对象某个属性 查询匿名类型结果 [1.查询结果返回集合元素] 在LINQ查询中,select子句和from子句都是必备子句.LINQ查询表达式必须 ...

  8. LINQ查询表达式---------into

    LINQ查询表达式---------into into 上下文关键字创建一个临时标识符,以便将 group.join 或 select 子句的结果存储到新的标识符 class Program { pu ...

  9. LINQ查询表达式(1) - 查询表达式基础

    LINQ包括五个部分:LINQto Objects.LINQ to DataSets.LINQ to SQL.LINQ to Entities.LINQ to XML. 什么是查询?它有什么用途? “ ...

随机推荐

  1. MySQL 基础查询

    6月业绩榜 名次   伙伴 业绩 签单 面谈 每日目标 1 杜艳花 12367 2 0 查看目标 2 郑东杰 2345 1 0 查看目标 3 黄传龙 345 1 1 查看目标 4 測试 0 0 0 查 ...

  2. 使用Redis做产品统计的两种模式

    http://zihua.li/2012/07/two-patterns-of-statistics-using-redis/ 产品运行过程中及时记录收集并分析统计数据对产品的持续改进有重要的指导作用 ...

  3. Error: unrecognized flag -version

    按照网上的教程http://www.ituring.com.cn/article/13473 来确认node.js是否成功安装. 须要在命令行输入:node -version. 但是我在命令行输入:n ...

  4. dotnet core 使用 sqlite 部署到 Centos 服务器

    原文:dotnet core 使用 sqlite 部署到 Centos 服务器 本文告诉大家如何创建一个 asp dotnet core 程序,这个程序使用 sqlite 保存,部署程序到 Cento ...

  5. vscode 如何格式化vue(template)html代码 , 保持标签属性不换行

    微软的vscode 真心强大 , electron 框架写的 , 用js写的桌面应用 , 有能力的话大家可以分析一下人家的源码 , 反正我是看不了 , 太牛掰了 在一次跟新后我发现莫名奇妙的些在组件( ...

  6. HDU 1143 Tri Tiling(递归)

    意甲冠军:一些现有的1*2小盒子.求拼3*n多少个长方形的拼写. 思考: 因为它是一个递归式.肯定会遇到层的关系.仔细观察,研究发现,每层应设置2一层.(奇数层不能是矩形)而从显卡好最后一层的最后一战 ...

  7. 借助Photoshop,Illustrator等设计软件进行WPF图形图像的绘制

    原文:借助Photoshop,Illustrator等设计软件进行WPF图形图像的绘制 本文所示例子是借助第三方设计软件,制作复杂的矢量图形,转成与XAML酷似的SVG,再转换成xaml而实现的. 这 ...

  8. ASP.NET Core 简介 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 简介 - ASP.NET Core 基础教程 - 简单教程,简单编程 ← ASP.NET Core 基础教程 ASP.NET Core Windows 环境配置 → A ...

  9. OpenGL(七) 光照模型及设置

    OpenGL把现实世界中的光照系统近似归为三部分,分别是光源.材质和光照环境. 光源就是光的来源,是"光"这种物质的提供者: 材质是指被光源照射的物体的表面的反射.漫反射(Open ...

  10. .net 模拟发起HTTP请求(用于上传文件)

    用C#在服务端发起http请求,附上代码一 /// <summary> /// 文件帮助类 /// </summary> public class FileHelper { / ...