“21天好习惯” 第一期-12

LINQ查询几种方式

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

1、form子句

创建一个LINQ表达式必须要以from子句开头。

1.1 单个form子句

string[] values = { "中国", "巴黎", "美国", "俄罗斯", "瑞士" };

//查询包含“国”的字符串
var valueQuery = from v in values
                 where v.IndexOf("国") > 0
                 select v;

foreach (var v in valueQuery)
{
    Console.WriteLine("{0,1}", v);
}
//查询结果
//中国
//美国

在这个LINQ表达式的from子句中,v叫做范围变量,values是数据源。v的作用域存在于当前的LINQ表达式,表达式以外不能访问这个变量。where用来筛选元素,select用于输出元素。这里的范围变量v,和foreach语句中得隐式变量v都可以由编译器推断出其类型。

使用LINQ查询List<T>集合

public class CustomerInfo
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Tel { get; set; }
}
private void formExpDemo2()
{
    //这里用了,对象和集合初始化器
    List<CustomerInfo> customers = new List<CustomerInfo> { 
    new CustomerInfo{ Name="欧阳晓晓", Age=35, Tel ="1330708****"},
    new CustomerInfo{ Name="上官飘飘", Age=17, Tel ="1592842****"},
    new CustomerInfo{ Name="诸葛菲菲", Age=23, Tel ="1380524****"}
};
//查询年龄大于20的客户,注意这里的范围变量用了显示类型CustomerInfo
var query = from CustomerInfo ci in customers
            where ci.Age > 20
            select ci;
            
foreach (CustomerInfo ci in query)
{
     Console.WriteLine("姓名:{0} 年龄:{1} 电话:{2}", ci.Name, ci.Age, ci.Tel);
}
}
//结果
//姓名:欧阳晓晓 年龄:35 电话:1330708****
//姓名:诸葛菲菲 年龄:23 电话:1380524****

1.2 复合from子句

在查询数据源中,元素的属性是一个集合时,可以使用复合from子句对这个属性集合查询。

public class CustomerInfo
{
     public string Name { get; set; }
     public int Age { get; set; }
     public List<string> TelTable { get; set; }
}
private void formExpDemo()
{
     List<CustomerInfo> customers = new List<CustomerInfo> { 
     new CustomerInfo{ Name="欧阳晓晓", Age=35, TelTable=new List<string>{"1330708****","1330709****"}},
     new CustomerInfo{ Name="上官飘飘", Age=17, TelTable=new List<string>{"1592842****","1592843****"}},
     new CustomerInfo{ Name="诸葛菲菲", Age=23, TelTable=new List<string>{"1380524****","1380525****"}}
};
//查询包含电话号码1592842****的客户
var query = from CustomerInfo ci in customers
            from tel in ci.TelTable
            where tel.IndexOf("1592842****") > -1
            select ci;

foreach (var ci in query)
{
      Console.WriteLine("姓名:{0} 年龄:{1}", ci.Name, ci.Age);
      foreach (var tel in ci.TelTable)
      {
             Console.WriteLine("电话:{0}", tel);
      }
}
}

1.3 多个from子句

复合from子句查询的是单个数据源中的子元素的集合,而多个from子句,是载入多个数据源进行查询。

private void formExpDemo()
{
  List<CustomerInfo> clist = new List<CustomerInfo> 
{ 
  new CustomerInfo{ Name="欧阳晓晓", Age=35, Tel ="1330708****"},
  new CustomerInfo{ Name="上官飘飘", Age=17, Tel ="1592842****"},
  new CustomerInfo{ Name="诸葛菲菲", Age=23, Tel ="1380524****"}
};
List<CustomerInfo> clist2 = new List<CustomerInfo> 
{ 
   new CustomerInfo{ Name="令狐冲", Age=25, Tel ="1330708****"},
   new CustomerInfo{ Name="东方不败", Age=35, Tel ="1592842****"},
   new CustomerInfo{ Name="任盈盈", Age=23, Tel ="1380524****"}
};

//在clist中查找Age大于20的客户,
//在clist2中查找Age小于30的客户
var query = from customer in clist
            where customer.Age > 20
            from customer2 in clist2
            where customer2.Age < 30
            select new { customer, customer2 };

foreach (var ci in query)
{
    Console.WriteLine("{0} {1}", ci.customer.Name,ci.customer2.Name);
}
}

未完待续。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值