可数加入 - 加入两个列表

时间:2013-03-12 11:04:02

标签: c#

我有两个列表(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

这是什么类型的加入?

5 个答案:

答案 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