Basic Query Operations

LINQ 的查询语法和 SQL 非常相似,只不过为了智能提示和类型推断将 select 子句放在最后。

int[] nums = { 1, 2, 3, 4 };
var q = from n in nums select n;


"from n in nums" 中的两个变量用法类似 "foreach (var n in nums)","select n" 用于返回当前变量。

1. Filtering

所谓 Filtering,就是 where 子句,用于进行条件过滤。

Query Syntax

int[] nums = { 1, 2, 3, 4 };
var q = from n in nums where n % 2 == 0 select n;

foreach (var v in q)
  Console.WriteLine(v);


Method Syntax

var q = nums.Where(n => n % 2 == 0);


输出:
2
4

2. Ordering

使用 "orderby ... ascending" 或 "orderby ... descending" 子句可以实现对结果的排序操作。

Query Syntax

int[] nums = { 1, 2, 3, 4 };
var q = from n in nums orderby n descending select n;

foreach (var v in q)
  Console.WriteLine(v);


Method Syntax

var q = nums.OrderByDescending(n => n);


输出:
4
3
2
1

3. Joining

下面这个例子稍微有点复杂,我们的意图是将 User.Sex 从整数转换成对应的性别字符。 "join...in..." 的作用是将额外的数据源合并进来,而 "on...equals..." 则用于说明合并的条件,最后我们使用匿名类型来创建所需的新数据容器。

Query Syntax

var sex = new[] {
       new { Id = 0, Name = "女"},
       new { Id = 1, Name = "男"}
     };

var users = new[] {
 new { Name = "User1", Sex = 1 },
 new { Name = "User2", Sex = 0 },
 new { Name = "User3", Sex = 1 },
 new { Name = "User4", Sex = 0 },
 new { Name = "User5", Sex = 1 },
 new { Name = "User6", Sex = 0 },
 new { Name = "User7", Sex = 1 },
 new { Name = "User8", Sex = 0 },
 new { Name = "User9", Sex = 1 }
 };

var q = from u in users
    join s in sex
    on u.Sex equals s.Id
    select new { Name = u.Name, Sex = s.Name };

foreach (var u in q)
  Console.WriteLine("Name:{0} Sex:{1}", u.Name, u.Sex);


Method Syntax

var q = users.Join(sex, u => u.Sex, s => s.Id, (u, s) => new { Name = u.Name, Sex = s.Name });


输出:
Name:User1 Sex:男
Name:User2 Sex:女
Name:User3 Sex:男
Name:User4 Sex:女
Name:User5 Sex:男
Name:User6 Sex:女
Name:User7 Sex:男
Name:User8 Sex:女
Name:User9 Sex:男

4. Grouping

使用 "group...by..." 可以按照一定的条件进行分组返回,该语句可以省略 select 子句。

Query Syntax

var users = new[] {
 new { Name = "User1", Sex = 1 },
 new { Name = "User2", Sex = 0 },
 new { Name = "User3", Sex = 1 },
 new { Name = "User4", Sex = 0 },
 new { Name = "User5", Sex = 1 },
 new { Name = "User6", Sex = 0 },
 new { Name = "User7", Sex = 1 },
 new { Name = "User8", Sex = 0 },
 new { Name = "User9", Sex = 1 }
};

var q = from u in users group u by u.Sex;

foreach (var group in q)
{
  Console.WriteLine("---------------");

  foreach (var u in group)
    Console.WriteLine(u.Name);
}


Method Syntax

var q = users.GroupBy(u => u.Sex);


输出:
---------------
User1
User3
User5
User7
User9
---------------
User2
User4
User6
User8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值