2013-03-12 2 views
0

у меня есть два списка (список) с следующими данными:перечислимых Регистрация - Объединение двух списков

Список Один

James 
Jack 
Laura 
Harry 

Список Два

Jeffery 
Peters 
Smith 

Является ли это можно выполнить объединение, используя Enumerable Join, чтобы сделать следующее:

James Jeffery 
James Peters 
James Smith 
Jack Jeffery 
Jack Peters 
Jack Smith 
Laura Jeffery 
Laura Peters 
Laura Smith 
Harry Jeffery 
Harry Peters 
Harry Smith 
Harry Jeffery 

Что это за присоединение?

+1

Вот в лучшем случае "перекрестное соединение", иначе известный как два вложенных циклов , – millimoose

+0

Это не объединение, а продукт. –

ответ

2

Это перекрестное соединение:

List<string> textLines1 = new List<string>() { 
    "Kames", "Jack", "Laura", "Harry" 
}; 
List<string> textLines2 = new List<string>() { 
    "Jeffery", "Peters", "Smith" 
}; 

var query = from t1 in textLines1 
      from t2 in textLines2 
      select string.Format("{0} {1}", t1, t2); 

var results = query.ToList(); 

возвращает то, что вы ожидаете.

Это также можно сделать с помощью запроса на основе метода:

var query2 = textLines1.SelectMany(t1 => textLines2, (t1, t2) => string.Format("{0} {1}", t1, t2)); 

var results2 = query2.ToList(); 
+0

Это LINQ? Возможно ли это и без LINQ с использованием textLines1.Join <>()? –

+0

'textLines1.Join ' также является частью LINQ! – MarcinJuraszek

+0

А, не знал этого. Благодарю. –

1

В Linq было бы:

List<string> TabOne = new List<string>() { "Kames", "Jack", "Laura", "Harry" }; 
List<string> TabTwo = new List<string>() { "Jeffery", "Peters", "Smith" }; 

var combo = from p in TabOne 
     from c in TabTwo 
     select new 
     { 
      Name = p, 
      SurName = c 
     }; 

Это называется перекрестное соединение.

+0

Пришлось изменить одну строку вашего кода, чтобы запустить ее: var combo = from p в TabOne из c в TabTwo выберите новый {Name = p, Surname = c}; – matcheek

+0

Действительно вы правы :) – Alex

0
var l1 = new []{ "James", "Jack", "Laura", "Harry" }; 
var l2 = new []{ "Jeffery", "Peters", "Smith" }; 

var result = from i1 in l1 
      from i2 in l2 
      select i1 + " " + i2; 
0

Вы можете попробовать этот способ:

var result = list1.SelectMany(i1 => list2.Select(i2 => i1 + " " + i2)); 

Пример:

class Program 
{ 
    public static void Main() 
    { 
     string[] list1 = new[] { "James", "Jack", "Laura", "Harry" }; 
     string[] list2 = new[] { "Jeffery", "Peters", "Smith" }; 
     var result = list1.SelectMany(i1 => list2.Select(i2 => i1 + " " + i2)); 

     foreach (string s in result) 
     { 
      Console.WriteLine(s); 
     } 
    } 
} 

App Выход:

James Jeffery 
James Peters 
James Smith 
Jack Jeffery 
Jack Peters 
Jack Smith 
Laura Jeffery 
Laura Peters 
Laura Smith 
Harry Jeffery 
Harry Peters 
Harry Smith 
Смежные вопросы