【问题标题】:Translating to lambda expression转换为 lambda 表达式
【发布时间】:2013-09-07 06:32:52
【问题描述】:

你会如何将这个 linq 表达式的 select 部分具体翻译成 lambda?

var query2 = from method in typeof(double).GetMethods() // integrated method c# reflection
             orderby method.Name
             group method by method.Name into groups
             select new { MethodName = groups.Key, NumberOfOverloads = groups.Count()};

到目前为止,我有这个:

 var methods = typeof(double).GetMethods();
 var query3 = methods.OrderBy(x => x.Name).GroupBy(y => y.Name);

我尝试了这个选择,但我得到了编译器错误。

 var query3 = methods.OrderBy(x => x.Name).GroupBy(y => y.Name)
 .Select<new { MethodName = groups.Key, NumberOfOverloads = groups.Count()}>();

感谢您的帮助。

【问题讨论】:

  • 在 C# 规范中可以找到将查询理解转换为流畅语法的确切规则。

标签: c# linq select lambda anonymous-types


【解决方案1】:

这是准确的翻译。我不知道你为什么需要OrderBy tho,考虑到你没有使用Select 中的元素

var methods = typeof(double).GetMethods()
     .OrderBy(x=>x.Name)
     .GroupBy(x=>x.Name)
     .Select(x=> new { MethodName = x.Key, NumberOfOverloads = x.Count()});

得到同样的结果

var methods = typeof(double).GetMethods()
 .GroupBy(x=>x.Name)
 .Select(x=> new { MethodName = x.Key, NumberOfOverloads = x.Count()});

而且您无需订购集合,因此节省了一些计算时间。

【讨论】:

  • 谢谢,我一直在尝试了解 linq 运算符。您是否知道任何可以很好地解释它们的在线资源?
  • 对我有影响的是 Jon Skeet 的书 C# in Depth,但您必须购买它。你可以在他的blog 上找到一些材料,但我认为对于 LINQ“初学者”来说并不容易理解
猜你喜欢
  • 1970-01-01
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
相关资源
最近更新 更多