我试图在C#中围绕LINQ语句,我试图将简单查询转换为等效的方法语法。
我见过的大多数例子都混杂着其他陈述和条件,并使用更复杂的类型。现在,我希望尽可能简化这一点。 任何提示将不胜感激。
// create a list of numbers
List<int> data1 = new List<int>() { 1, 2, 3, 4 };
// create a list of numbers
List<int> data2 = new List<int>() { 5, 6, 7, 8 };
var query = from n1 in data1
from n2 in data2
select n1 * n2;
有了这个,我得到16个数字,我可以使用foreach循环迭代。 我想知道如何使用方法语法做同样的事情。
感谢。
答案 0 :(得分:10)
完整的详细信息在C#语言规范的第7.16节中。另外,我有an article in my Edulinq blog series你可能会觉得更容易阅读。
但是,对于您的特定情况......次要from
来电最终会被转换为SelectMany
来电,因此您可以启动,将其视为:< / p>
var query = data1.SelectMany(n1 => data2, (n1, n2) => new { n1, n2 })
.Select(pair => pair.n1 * pair.n2);
但实际上编译器会崩溃这两个,因为你只是在select
之后得到from
子句:
var query = data1.SelectMany(n1 => data2, (n1, n2) => n1 * n2);
对于查询表达式及其扩展感到满意绝对是一个好主意 - 我倾向于发现当没有涉及任何透明标识符(连接,让等)时,方法语法和查询表达式一样容易阅读,有时候更简单 - 但是当涉及多个范围变量时,查询表达式会简化事情。
答案 1 :(得分:1)
您可以使用SelectMany
方法:
var query = data1.SelectMany(n1 => data2, (n1, n2) => n1 * n2);