Как использовать LINQ для объединения двух или более коллекций в одну коллекцию - PullRequest
4 голосов
/ 19 ноября 2011

У меня три коллекции

var col1 = new {Name1 = "Frank", ID1 = 123, ABC = "abc"};
var col2 = new {Name2 = "Harry", ID2 = 456, XYZ = "xyz"};
var col3 = new {Name3 = "Bob"};

Я хочу создать четвертую коллекцию, которая объединит эти три коллекции.

Используя три коллекции в качестве примера, я бы хотел, чтобы четвертая коллекция «выглядела» следующим образом:

+===================+
| FirstName | Ident |
+===================+
| Frank     | 123   |
+-------------------+
| Harry     | 456   |
+-------------------+
| Bob       |       |
+-------------------+

Я даже не знаю, возможно ли это, но я пытаюсь выяснить, могу ли я использовать LINQ для объединения таблиц, сопоставляя поля col1, col2 и col3 с полями четвертой коллекции.

Псевдо-код, надеюсь, уточнить, что я пытаюсь объяснить:

var col4 = from c1 in col1, c2 in col2, c3 in col3
     select new {FirstName = (c1.Name1, c2.Name2, c3.Name3), Ident = (c1.ID1, c2.ID2);

Если это возможно, как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 19 ноября 2011

Вы можете использовать Linq Union.Я подделал инициализацию, так как ваш пример на самом деле не имеет коллекций, но все еще сохраняет анонимную природу элементов, так как я думаю, что это то, что вы намереваетесь.

static void Main(string[] args) {
    var dummys = new List<int>(); dummys.Add(1);
    var col1 = from dummy in dummys
               select new { Name1 = "Frank", ID1 = 123, ABC = "abc" };
    var col2 = from dummy in dummys
               select new { Name2 = "Harry", ID2 = 456, XYZ = "xyz" };
    var col3 = from dummy in dummys
               select new { Name3 = "Bob" };

    var col4 = col1.Select(c=> new { FirstName=c.Name1, Ident=new Nullable<int>(c.ID1)})
        .Union(col2.Select(c=> new { FirstName=c.Name2, Ident=new Nullable<int>(c.ID2)}))
        .Union(col3.Select(c=> new { FirstName=c.Name3, Ident=new Nullable<int>()}));

    foreach (var c in col4) {
        Console.WriteLine(c);
    }
    Console.ReadKey();
}
3 голосов
/ 19 ноября 2011

Я думаю, вы ищете оператора LINQ Union: http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...