class ShowAllUserNames
{
static void Main()//仅选择user对象名称的查询
{
IEnumerable<string> query = from user in SampleData.AllUsers
select user.Name;
//query {System.Linq.Enumerable.WhereSelectListIterator<Model.User,string>}
//我们使用user.Name作为投影,即可看到结果变为字符串序列,而不是User对象了。
//查询表达式的转换遵循与之前一样的规则,变为
//SampleData.AllUsers.Select(user => user.Name)
//编译器准许这样做,由于从Enumerable所选择的Select扩展方法实际具有如下
//签名
//static IEnumerable<TResult> Select<TSource,TResult>
// (this IEnumerable<TSource> source,
// Func<TSource,TResult> selector)
//将Lambda表达式转换为Func<TSource,TResult>的时候。
//首先根据SampleData.AllUsers的类型推断出TSource为User,这样就知道了
//Lambda表达式的参数类型,并因此将user.Name作为返回string类型的
//属性访问表达式,也就可以推断出TRsult为string。 Lambda表达式允许使用
//隐式类型参数的原因。
foreach (string name in query)
//先foreach 后 query 后 in 然后 select user.Name in都会调用user.Name
//后string name
//"Tim Trotter"
//"Tara Tutu"
//"Deborah Denton"
//"Darren Dahlia"
//"Mary Malcop"
//"Colin Carton"
{
Console.WriteLine(name);
}
}
} class ShowAllUserNames
{
static