from 语法

要写一个Linq表达式必须要以from开头。

不说废话,先看例子:

一、简单的from查询

1.首先,建立一个控制台应用程序名字为:DemoFrom_1

  注意引入System.Core

2.在Program.cs 输入以下语句

View Code
class Program
{
static void Main(string[] args)
{
// 定义数据源
// string 是实现了IEnumerable接口的,所以可以使用用Linq查询
string[] values = { "刘备", "诸葛亮","关羽", "张飞" };
// Linq 查询
var value = from v in values where v.Length > 2 select v;
foreach (var n in value)
Console.WriteLine(n);
Console.ReadKey();
}
}

3.运行程序,得到以下结果

 

讲解:

  var value = from v in values where v.Length > 2 select v;

  在Linq的表达式中,v是范围变量(作用域为当前Linq表达式中)。values是数据源变量。where 用来筛选数据源元素。select 输出元素。

在该例子中,从数据源(values)中筛选(where)长度大于2(v.Length > 2 )的元素。并且输出符合的元素,赋给变量value。这时,value中

为符合条件的数据。后面,用foreach 输出。

  Linq查询,还是简单吧。不要眨眼,往下接着看。

二、查询自定义类

  有时候,我们需要从自定义类中查询我们需要的数据。

1.我们在项目中添加类文件:GuestInfo.cs。代码如下:

  

View Code
     /// <summary>
/// 客户信息类
/// </summary>
public class GuestInfo
{
/// <summary>
/// 姓名
/// </summary>
public string Name { set; get; }
/// <summary>
/// 年龄
/// </summary>
public int Age { set; get; }

/// <summary>
/// 电话
/// </summary>
public string Tel { set; get; }

/// <summary>
/// 电话列表
/// </summary>
public List<string> TelList { set; get; }
}

2.将Program.cs,做如下修改:

View Code
static void Main(string[] args)
{
//初始化集合
List<GuestInfo> gList = new List<GuestInfo>()
{
new GuestInfo {
Name = "张三",
Age = 21,
Tel="111111",
TelList = new List<string>(){
"123123",
"321321"}
},
new GuestInfo {
Name = "李四",
Age = 36,
Tel="222222",
TelList = new List<string>(){
"456456",
"654654"}
},
new GuestInfo {
Name = "王五",
Age = 19,
Tel="333333",
TelList = new List<string>(){
"789789",
"987987"}
},
};

//查找 年龄大于20,并且电话号码列表中包含“456456”的客户
// 第一个from 查询出年龄大于20的客户,并存放到范围变量guest中
// 第二个from 从范围变量guest中查询出电话列表中包含“456456”的客户数据
// 查询出符合的客户信息 select guest;
var query = from GuestInfo guest in gList
where guest.Age > 20
from tel in guest.TelList
where tel.IndexOf("456456") > -1
select guest;

//输出 客户数据
foreach (var g in query)
{
Console.WriteLine(string.Format("{0} 年龄:{1}", g.Name, g.Age));
foreach (var t in g.TelList)
Console.WriteLine(string.Format(" 电话:{0}", t));
}
Console.WriteLine("*************************************************");
Console.ReadKey();
}

3.输出为:


三、笛卡尔两个查询集合

1.在Program.cs中添加如下代码:

View Code
// 笛卡尔两个集合数据
//初始化集合
List<GuestInfo> gList_1 = new List<GuestInfo>()
{
new GuestInfo {
Name = "赵六",
Age = 21,
Tel="111111",
TelList = new List<string>(){
"111111",
"321321"}
}
};

// 第一个from 查询出年龄大于20的客户,并存放到范围变量guest中
// 第二个from 查询出电话列表中包含“111111”的客户,存放在范围变量guest1中
// 联合两个查询结果 select new {guest,guest1 };
var query_1 = from GuestInfo guest in gList
where guest.Age > 20

from GuestInfo guest1 in gList_1
where guest1.TelList.IndexOf("111111") > -1
// 交叉联接查询,即两个结果的笛卡尔集
select new {guest,guest1 };

//输出 客户数据
foreach (var g in query_1)
{
Console.WriteLine(string.Format("{0}-{1}", g.guest.Name,g.guest1.Name));
}

Console.WriteLine("*************************************************");

foreach(var g in query_1)
{
// guest 中的数据
Console.WriteLine(string.Format("{0} 年龄:{1}", g.guest.Name, g.guest.Age));
foreach (var t in g.guest.TelList)
Console.WriteLine(string.Format(" 电话:{0}", t));

// guest1 中的数据
Console.WriteLine(string.Format("{0} 年龄:{1}", g.guest1.Name, g.guest1.Age));
foreach (var t in g.guest1.TelList)
Console.WriteLine(string.Format(" 电话:{0}", t));
}

Console.ReadKey();

2.输出结果:

是不是很简单,可见,Linq还是蛮有趣的呢。呵呵!学习中!

 

 

posted on 2012-02-18 16:44  金丝猴  阅读(380)  评论(0编辑  收藏  举报