LINQ:为什么此查询只能使用查询语法,而不能使用方法语法? [英] LINQ: why this query works in query syntax but not in method syntax?

查看:122
本文介绍了LINQ:为什么此查询只能使用查询语法,而不能使用方法语法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个查询

string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };

var query =
    from     n in names
    where    n.Contains ("a")   // Filter elements
    orderby  n.Length           // Sort elements
    select   n.ToUpper();       // Translate each element (project)

foreach(var item in query)
    Console.WriteLine(item);

可以正常工作,并按预期给出结果JAY MARY HARRY.

works perfectly, gives the result JAY MARY HARRY as expected.

但是当我运行这个

string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };

var query2 = names.Where(n=> n.Contains("a")).OrderBy(n=>n.Length).Select(n=>n.ToUpper);

foreach(var item in query2)
    Console.WriteLine(item);

我收到此消息The type arguments for method 'System.Linq.Enumerable.Select<TSource,TResult>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TResult>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

我也尝试运行此

var query2 = names.Where(n=> n.Contains("a")).OrderBy(n=>n.Length).Select<string, string>(n=>n.ToUpper);

它说Cannot convert method group 'ToUpper' to non-delegate type 'string'. Did you intend to invoke the method? Cannot convert lambda expression to delegate type 'System.Func<string,string>' because some of the return types in the block are not implicitly convertible to the delegate return type.

我不知道发生了什么事?谁能告诉我为什么查询语法可以正常工作吗?方法语法不能正常工作?

I don't know what's happening? Can any one tell me why the query syntax is working fine method syntax is not working?

推荐答案

ToUpper之后您缺少一对括号:

You are missing a pair of parentheses after ToUpper:

var query2 = names
    .Where(n=> n.Contains("a"))
    .OrderBy(n=>n.Length)
    .Select(n=>n.ToUpper() /* <<== HERE */);

这篇关于LINQ:为什么此查询只能使用查询语法,而不能使用方法语法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆