2013-03-12 52 views
0

我有兩個列表(列表)具有以下數據:可枚舉連接 - 連接兩個列表

列表中的一個

James 
Jack 
Laura 
Harry 

列出兩種

Jeffery 
Peters 
Smith 

是它可能使用Enumerable Join做一個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 2013-03-12 11:06:05

+0

這不是一個加入,而是一個產品。 – 2013-03-12 11:10:06

回答

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 <>()也有可能嗎? – 2013-03-12 11:09:56

+0

'textLines1.Join '也是LINQ的一部分! – MarcinJuraszek 2013-03-12 11:10:35

+0

啊,不知道。謝謝。 – 2013-03-12 11:11:14

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 TabOne中的p從TabTwo中的c選擇new {Name = p,Surname = c}; – matcheek 2013-03-12 11:29:11

+0

確實你是對的:) – Alex 2013-03-12 11:33:01

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