关于c#:如何使用LINQ to SQL执行CROSS JOIN?

关于c#:如何使用LINQ to SQL执行CROSS JOIN?

How do you perform a CROSS JOIN with LINQ to SQL?

如何使用LINQ to SQL执行CROSS JOIN?


交叉联接只是两组的笛卡尔乘积。 没有显式的join运算符。

1
2
3
4
5
6
7
8
9
var combo = from p in people
            from c in cars
            select new
            {
                p.Name,
                c.Make,
                c.Model,
                c.Colour
            };

linq扩展方法也是如此:

1
2
3
4
5
6
7
8
9
var names = new string[] {"Ana","Raz","John" };
var numbers = new int[] { 1, 2, 3 };
var newList=names.SelectMany(
    x => numbers,
    (y, z) => { return y + z +" test"; });
foreach (var item in newList)
{
    Console.WriteLine(item);
}

根据史蒂夫的回答,最简单的表达是这样的:

1
2
3
var combo = from Person in people
            from Car    in cars
            select new {Person, Car};

Tuple是笛卡尔积的好类型:

1
2
3
4
public static IEnumerable<Tuple<T1, T2>> CrossJoin<T1, T2>(IEnumerable<T1> sequence1, IEnumerable<T2> sequence2)
{
    return sequence1.SelectMany(t1 => sequence2.Select(t2 => Tuple.Create(t1, t2)));
}


扩展方式:

1
2
3
4
public static IEnumerable<Tuple<T1, T2>> CrossJoin<T1, T2>(this IEnumerable<T1> sequence1, IEnumerable<T2> sequence2)
{
    return sequence1.SelectMany(t1 => sequence2.Select(t2 => Tuple.Create(t1, t2)));
}

并使用像:

1
vals1.CrossJoin(vals2)


推荐阅读

    linux定时执行命令?

    linux定时执行命令?,时间,系统,服务,任务,工作,标准,情况,周期性,工具,命令,l

    linux看命令执行过程?

    linux看命令执行过程?,系统,服务,状态,软件,时间,数据,地址,命令,进程,情况,l

    linux登陆执行命令?

    linux登陆执行命令?,系统,服务,工具,地址,密码,百度,管理,检测,网络,第一,怎

    linux远程执行多命令?

    linux远程执行多命令?,工具,服务,命令,状态,暂停,代码,底部,时间,地址,系统,L

    linux下执行命令行?

    linux下执行命令行?,工作,系统,信息,单位,命令,基础,地址,设备,权威,标准,mv

    linux安装执行命令?

    linux安装执行命令?,系统,软件,网络,密码,官方网站,在线,工作,盘中,电脑,第

    linux执行命令超时?

    linux执行命令超时?,时间,代码,系统,名字,环境,工作,服务,下来,名称,地址,如

    linux远程执行多命令?

    linux远程执行多命令?,工具,服务,命令,状态,暂停,代码,底部,时间,地址,系统,L

    linux命令行执行工具?

    linux命令行执行工具?,工具,系统,网络,分析,工作,服务,状态,信息,电脑,发行,s

    linux执行命令超时?

    linux执行命令超时?,时间,代码,系统,名字,环境,工作,服务,下来,名称,地址,如

    linux安装执行命令?

    linux安装执行命令?,系统,软件,网络,密码,官方网站,在线,工作,盘中,电脑,第

    linux执行两条命令?

    linux执行两条命令?,单位,工作,地址,命令,连续,系统,分行,权威,信息,目录,Lin

    linux执行pl命令?

    linux执行pl命令?,代码,服务,工具,位置,标准,系统,首页,数据,操纵,环境,perl

    linux命令执行10次?

    linux命令执行10次?,地址,工作,信息,系统,命令,目录,标准,设备,发行,文件,Lin

    linux执行命令后无号?

    linux执行命令后无号?,系统,环境,信息,工具,状态,数据,命令,文件,字符集,环

    linux周期执行命令?

    linux周期执行命令?,工作,系统,周期,地址,命令,工具,信息,时间,任务,目录,lin

    linux执行命令被阻止?

    linux执行命令被阻止?,档案,系统,服务,网络,工具,在线,信息,基础,状态,命令,

    linux执行命令大全?

    linux执行命令大全?,工作,系统,地址,信息,命令,目录,工具,基础,设备,发行,Lin

    循环执行linux命令?

    循环执行linux命令?,工具,系统,名称,代码,第一,环境,位置,数字,脚本,变量,Lin

    linux命令执行很慢?

    linux命令执行很慢?,软件,系统,工具,分析,机构,服务,培训,教育,数字,数据,Lin