无涯教程-LINQ - Cross Join(交叉联接)

103 阅读2分钟

在LINQ中,Cross Join将生成项集合的笛卡尔积。加入集合不需要任何条件。

在LINQ Cross Join中,左侧集合上的每个元素都将映射到右侧集合上的所有元素。

LINQ交叉联接的语法

下面是使用LINQ Cross Join获取集合项的笛卡尔乘积的语法。

var result = from e in objEmp1
from d in objDept1
select new
{
    EmployeeName = e.Name,
    DepartmentName = d.DepName
};

从上面的语法来看,“objEmp1”集合中的每个元素都会映射到“objDept1”集合中的所有元素。

LINQ交叉联接示例

下面是使用LINQ Cross Join获取项集合的笛卡尔乘积的示例。

using System;
using System. Collections;
using System.Collections.Generic;
using System. Linq;
using System. Text;
using System.Threading.Tasks;

namespace ConsoleApp1 { class Programme2 { static void Main(string[] args) { //创建部门列表objDept1的对象 List objDept1 = new List(){ //在部门中赋值 new Department{DepId=1,DepName="Software"}, new Department{DepId=2,DepName="Finance"}, new Department{DepId=3,DepName="Health"} }; //创建员工列表objEmp1的对象 List objEmp1 = new List()

{ //在 Employee 列表中插入值 new Employee { EmpId=1,Name = "Vaishali Tyagi", DeptId=1 },

new Employee { EmpId=2,Name = "Arpita Rai", DeptId=1 },

new Employee { EmpId=3,Name = "Vinay Tyagi", DeptId=2 },

new Employee { EmpId=4,Name = "Sateesh", DeptId =2},

new Employee { EmpId=5,Name = "Madhav"}

}; /应用 linq 查询从 Employee 中获取值 和部门列表并将值存储在变量“result”中/ var result = from e in objEmp1

                     </span><span class="kwd">from</span><span class="pln"> d </span><span class="kwd">in</span><span class="pln"> objDept1
</span><span class="com">//Select 将获取员工姓名和部门名称</span><span class="pln">
                     </span><span class="kwd">select</span><span class="pln"> </span><span class="kwd">new</span><span class="pln">

                     </span><span class="pun">{</span><span class="pln">

                         </span><span class="typ">EmployeeName</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> e</span><span class="pun">.</span><span class="typ">Name</span><span class="pun">,</span><span class="pln">

                         </span><span class="typ">DepartmentName</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> d</span><span class="pun">.</span><span class="typ">DepName</span><span class="pln">

                     </span><span class="pun">};</span><span class="pln">
</span><span class="com">//foreach 循环将在“WriteLine”函数的帮助下打印结果的值</span><span class="pln">
        </span><span class="kwd">foreach</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> item </span><span class="kwd">in</span><span class="pln"> result</span><span class="pun">)</span><span class="pln">

        </span><span class="pun">{</span><span class="pln">

            </span><span class="typ">Console</span><span class="pun">.</span><span class="typ">WriteLine</span><span class="pun">(</span><span class="pln">item</span><span class="pun">.</span><span class="typ">EmployeeName</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">"\t | "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> item</span><span class="pun">.</span><span class="typ">DepartmentName</span><span class="pun">);</span><span class="pln">

        </span><span class="pun">}</span><span class="pln">

        </span><span class="typ">Console</span><span class="pun">.</span><span class="typ">ReadLine</span><span class="pun">();</span><span class="pln">

    </span><span class="pun">}</span><span class="pln">

</span><span class="pun">}</span><span class="pln">
</span><span class="com">//在这里,我们创建名为 Department 和 Employee 的类并分配变量</span><span class="pln">
</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Department</span><span class="pln">

</span><span class="pun">{</span><span class="pln">

    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> </span><span class="typ">DepId</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">get</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> </span><span class="typ">DepName</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">get</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">

</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Employee</span><span class="pln">

</span><span class="pun">{</span><span class="pln">

    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> </span><span class="typ">EmpId</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">get</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> </span><span class="typ">Name</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">get</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">

    </span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> </span><span class="typ">DeptId</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">get</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln">

</span><span class="pun">}</span><span class="pln">

}

在上面的示例中,无涯教程没有提到加入集合的任何条件。

输出:

LINQ Cross Join

这就是如何使用LINQ Cross Join来获得项集合的笛卡尔乘积的方法。

参考链接

www.learnfk.com/linq/linq-c…