【问题标题】:Compound Select using lambda expression使用 lambda 表达式的复合选择
【发布时间】:2011-08-25 09:28:48
【问题描述】:

什么相当于 lambda 表达式中的以下代码 sn-p?

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };

var pairs =
    from a in numbersA
    from b in numbersB
    where a < b
    select new { a, b };

【问题讨论】:

  • 刚刚启动 ILSpy 以找出答案,但它并没有将其更改为方法。 (看来我得等@Jon Skeet!)

标签: c# .net linq lambda


【解决方案1】:

这是一个使用 方法语法(与 查询语法相对)的 LINQ 表达式:

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
int[] numbersB = { 1, 3, 5, 7, 8 }; 

pairs = numbersA
  .SelectMany(_ => numbersB, (a, b) => new { a, b })
  .Where(x => x.a < x.b);

原来的查询被翻译成这样:

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
int[] numbersB = { 1, 3, 5, 7, 8 }; 

pairs = numbersA
  .SelectMany(_ => numbersB, (a, b) => new { a, b })
  .Where(x => x.a < x.b)
  .Select(x => new { x.a, x.b });

但最后一个 Select 不是必需的,可以删除。

【讨论】:

  • +1,这实际上是它被翻译成的,还是你会这样做?
  • @George Duckett:我已经扩展了我的答案来回答你的评论。
  • 谢谢,出于兴趣,您是如何找到原文翻译的?
  • 我知道有多个 from 会转换为 SelectMany 但我不确定最后一个 Select 所以我对生成的 IL 进行了比较,发现它是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 2012-03-25
相关资源
最近更新 更多