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