Скажем, у меня есть два списка:
var list1 = new int[] {1, 2, 3};
var list2 = new string[] {"a", "b", "c"};
Можно ли написать оператор LINQ, который будет генерировать следующий список:
var result = new []{
new {i = 1, s = "a"},
new {i = 1, s = "b"},
new {i = 1, s = "c"},
new {i = 2, s = "a"},
new {i = 2, s = "b"},
new {i = 2, s = "c"},
new {i = 3, s = "a"},
new {i = 3, s = "b"},
new {i = 3, s = "c"}
};
?
Обновлено: я забыл упомянуть, что не хотел этого в синтаксисе запроса. В любом случае, основываясь на ответе Притсангхи, я получил следующее:
var result = list1.SelectMany(i => list2.Select(s => new {i = i, s = s}));
Да, странно, что вы выбрали ответ Джона в качестве ответа, когда Притсангха вошел первым и получил другую версию того же кода (с должным уважением к Джону).
Если бы я мог выбрать оба, я бы сделал это. Что до того, что мне не нравится синтаксис запросов, мне он просто не нравится. Это кажется неправильным, поскольку он не подходит для C#, и не все новые вещи в LINQ доступны в синтаксисе запросов, например ToList () и т. д.
вы можете сделать (из l1 в list1 из l2 в list2 выберите новый {i = l1, s = l2}). ToList ();





var result = from l1 in list1
from l2 in list2
select new { i = l1, s = l2};
Ответ preetsangha совершенно правильный, но если вам не нужно выражение запроса, то оно:
var result = list1.SelectMany(l1 => list2, (l1, l2) => new { i = l1, s = l2} );
(Это то, во что компилятор компилирует выражение запроса - они идентичны.)
Что не так с синтаксисом запроса?