可枚举连接-连接两个列表

本文关键字:连接 两个 列表 枚举 | 更新日期: 2023-09-27 18:03:33

我有两个列表(List),其中包含以下数据:

列表一个

James
Jack
Laura
Harry
两个<<p> 列表/strong>
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

这是什么类型的Join ?

可枚举连接-连接两个列表

这是一个交叉连接:

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();

在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
        };
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;

这也被称为Cartesian Product, Eric有一篇关于它的博客文章

您可以这样尝试:

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