C# LINQ和各种连接样品

C# LINQ和各种连接样品,c#,linq,C#,Linq,我只是在学林克。因此,首先我需要熟悉加入linq。我用linq在谷歌上搜索左外和右外连接,得到的答案如下 左外连接 右外连接 从那时起,我就无法理解它是如何进行左外连接的,因为这里没有使用左外关键字。所以请告诉我如何理解连接是左外连接还是右外连接 当我将使用linq时,可以使用how like运算符'a%'或'%a'或'%a%'。我看到有一个有点不同的包含方法 请讨论这两个问题。谢谢由于这条线,左侧外部连接是这样的: from dept in JoinedEmpDept.DefaultIfEmp

我只是在学林克。因此,首先我需要熟悉加入linq。我用linq在谷歌上搜索左外和右外连接,得到的答案如下

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

当我将使用linq时,可以使用how like运算符<代码>'a%'或'%a'或'%a%'。我看到有一个有点不同的包含方法


请讨论这两个问题。谢谢

由于这条线,左侧外部连接是这样的:

from dept in JoinedEmpDept.DefaultIfEmpty()
这将得到所有的员工,即使他们不在一个部门。生成SQL时,
DefaultIfEmpty
将联接转换为左外部联接

有关更多详细信息,请参阅此博客帖子:

LINQ查询语法的
“join…in…on…into”
部分已翻译为一个

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

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

如果
JoinedEmpDept
(即具有当前检查的外部列表条目的相同键的元素列表)为空,
dept
设置为空(由于方法)

伪代码翻译:

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”问题,您应该使用
string.Contains(“a”)
来表示
'%a%'
string.StartsWith(“a”)
来表示
'a%'
来表示
'%a'

例如:

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

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) 
关于()中的
操作员问题…
那么,您也可以使用
Contains()
,或者
Any()

左连接端, 而不是:

from user in tblUsers
join compTmp1 in tblCompanies
  on user.fkCompanyID equals compTmp1.pkCompanyID into compTmp2
from comp in compTmp2.DefaultIfEmpty()
你可以写:

from user in tblUsers
from comp in tblCompanies.Where(c => c.pkCompanyID == user.fkCompanyID).DefaultIfEmpty()

如果包含类工作运算符,那么('AB')运算符中的工作方式是什么。thanks@Thomas:作为提示,请尝试理解LINQ方法语法(编译器将LINQ query synstax转换为LINQ方法语法),因为在我看来,LINQ查询并不是什么“魔法”。。。
from user in tblUsers
join compTmp1 in tblCompanies
  on user.fkCompanyID equals compTmp1.pkCompanyID into compTmp2
from comp in compTmp2.DefaultIfEmpty()
from user in tblUsers
from comp in tblCompanies.Where(c => c.pkCompanyID == user.fkCompanyID).DefaultIfEmpty()