《深入理解c#》第十一章介绍了查询表达式的基本语法以及Linq to SQL中各种常见操作。虽然我有一定的SQL基础,但初次接触查询表达式还是难免容易有遗忘、混淆,这里把书中这一章出现过的查询表达式在这里整理一下:
# 11.2.1
var query = from user in SampleData.AllUser select user;
# equals to:
query = SampleData.AllUser.select(user=> user);
# 11.2.3
IEnumerable<string> query = from user in SampleData.AllUser
select user.Name;
# Select扩展方法签名:
static IEnumerable<TResult> Select<TSource, TResult>
(this IEnumerable<TSource> source,
Func<TSource, TResult> selector);
# 11.2.4
ArrayList list = new ArrayList{"First", "Second", "Third"};
var string = from string entry in list
select entry.Substring(0, 3);
#equals to:
list.Cast<string>().Select(entry=>entry.Substring(0, 3));
# 11.3
# 11.3.1
User tim = SampleData.Users.TesterTim;
var query = from defect in SampleData.AllDefects
where defect.Status != Status.Closed
where defect.AssignedTo == tim
select defect.Summary;
# equals to:
SampleData.AllDefects.Where(defect=> defect.Status!=Status.Closed)
.Where(defect=> defect.AssignedTo==tim)
.Select(defect=> defect.Summary);
# 11.3.2
from defect in SampleData.AllDefects select defect;
# equals to:
SampleData.AllDefects.Select(defect=>defect);
from defect in SampleData.AllDefects
where defect.Status != Status.Closed
where defect.AssignedTo == SampleData.Users.TesterTim
select defect;
# equals to:
SampleData.AllDefects.Where(defect=>defect.Status!=Status.Closed)
.Where(defect=>defect.AssignedTo == SampleData.User.TesterTim);
# 注意以上三组(包括11.3.1中的例子&#x