thể trùng lặp:
Nested “from” LINQ query expressed with extension methodsNice, chéo sạch tham gia trong LINQ chỉ sử dụng phương pháp khuyến nông
Tôi chắc chắn điều này đã được yêu cầu trước đây, nhưng tôi thành thật không thể tìm thấy bất cứ điều gì .
tôi tò mò những gì các cú pháp tương đương sẽ là sau chỉ sử dụng được xây dựng trong phương pháp khuyến nông LINQ:
var z1 =
from x in xs
from y in ys
select new { x, y };
tôi có thể nhận được kết quả tương tự với điều này:
var z2 = xs.SelectMany(x => ys.Select(y => new { x, y }));
Nhưng nó tạo ra mã IL khác nhau, và mã có một chút phức tạp và khó hiểu. Có cách nào sạch hơn để làm điều này với các phương pháp mở rộng?
Dưới đây là toàn bộ phương pháp thử nghiệm của tôi như được viết:
private void Test()
{
var xs = new[] { 1D, 2D, 3D };
var ys = new[] { 4D, 5D, 6D };
var z1 =
from x in xs
from y in ys
select new { x, y };
var z2 = xs.SelectMany(x => ys.Select(y => new { x, y }));
}
Đây là [Edit: C# interp của] IL mã (sử dụng ILSpy):
private void Test()
{
double[] xs = new double[]
{
1.0,
2.0,
3.0
};
double[] ys = new double[]
{
4.0,
5.0,
6.0
};
var z =
from x in xs
from y in ys
select new
{
x = x,
y = y
};
var z2 = xs.SelectMany((double x) =>
from y in ys
select new
{
x = x,
y = y
});
}
eh, đó không phải là mã il? –
Điều đó giống như một giải thích C# từ việc tháo gỡ thay vì IL. –
Eric Lippert trả lời khá nhiều câu hỏi tương tự hôm nay ở đây: http://stackoverflow.com/questions/9115675/nested-from-linq-query-expressed-with-extension-methods/9117009#9117009 – hvd