2013-03-12 23 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