gpt4 book ai didi

c# - LINQ 和各种连接示例

转载 作者:行者123 更新时间:2023-11-30 21:15:37 25 4
gpt4 key购买 nike

我刚刚学习 LINQ。所以首先我需要熟悉 join with linq。我用 linq 在 google 上搜索 left outer 和 right outer join,得到的答案是

左外连接

var LeftJoin = from emp in ListOfEmployees
join dept in ListOfDepartment
on emp.DeptID equals dept.ID into JoinedEmpDept
from dept in JoinedEmpDept.DefaultIfEmpty()
select new
{
EmployeeName = emp.Name,
DepartmentName = dept != null ? dept.Name : null
};

右外连接

var RightJoin = from dept in ListOfDepartment
join employee in ListOfEmployees
on dept.ID equals employee.DeptID into joinDeptEmp
from employee in joinDeptEmp.DefaultIfEmpty()
select new
{
EmployeeName = employee != null ? employee.Name : null,
DepartmentName = dept.Name
};

从那时起,我只是无法理解它是如何进行左外连接的,因为这里没有使用左外连接关键字。所以请告诉我如何理解连接是左外连接还是右外连接。

当我将使用 linq 时,like 运算符将如何使用。 “a%”或“%a”或“%a%”。我看到有一些不同的包含方法。

请讨论这两个问题。谢谢

最佳答案

LINQ 查询语法的 “join ... in ... on ... into” 被翻译成 GroupJoin()

GroupJoin() 方法,对于外部列表(或表)中的每个键,返回内部列表(或表)中具有相同键的元素列表,或者一个空列表,如果这样的 key 不存在。

因此,您问题的左外连接代码更清晰:

如果 JoinedEmpDept(即与当前检查的外部列表条目具有相同键的元素列表)为空,则 dept 设置为 null(感谢 DefaultIfEmpty() 方法).

伪代码翻译:

for each employee in ListOfEmployees  
get the list of dept having ID equal to empl.DeptID
and set them into JoinedEmpDept
then for each dept in JoinedEmpDept
(if empty iterates over a single null dept)
returns an new element containing:
employee.Name and dept.Name (or null if dept is null)

相反,右外部连接基本上是一个左外部连接,交换了外部和内部列表。


关于“like”的问题,对于'%a%',你应该使用string.Contains("a")string.StartsWith("a") for 'a%', string.EndsWith("a") for '%a'

例子:

var query = from el in listOfStrings
where el.StartsWith("AB")
select el;

编辑:

关于 IN() 运算符问题...
好吧,你也可以使用 Contains(),或者 Any():

var inGroup = new []{ "Foo", "Bar" };

var query1 = from el in listOfStrings
where inGroup.Contains(el)
select el;
// or equally
var query2 = from el in listOfStrings
where inGroup.Any(x => el.Equals(x))
select el;

关于c# - LINQ 和各种连接示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5662578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com