我有两个列表(List),其中包含以下数据:
列出一个
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
这是什么类型的加入?
答案 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();
答案 1 :(得分: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
};
它被称为交叉连接。
答案 2 :(得分: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;
答案 3 :(得分:0)
这也称为Cartesian Product
,Eric有blog post about it。
答案 4 :(得分: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