LINQ和各种加盟样品

问题描述

| 我只是学习LINQ。所以首先我需要熟悉与linq的联接。我用linq在google中搜索左外部和右外部联接,我得到了像这样的答案     左外连接
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时,可以如何使用运算符。
\'a%\' or \'%a\' or \'%a%\'
。我看到有包含方法,有点不同。 请讨论两个问题。谢谢     

解决方法

\"join ... in ... on ... into\"
的LINQ查询语法被转换为a4ѭ。
GroupJoin()
方法,对于外部列表(或表)中的每个键,返回内部列表(或表)中具有相同键的元素列表,如果不存在此键,则返回一个空列表。 因此,您问题的左外部联接代码更加清晰: 如果“ 6”(即与当前检查的外部列表条目具有相同键的元素列表)为空,则将“ 7”设置为空(由于使用“ 8”方法)。 伪代码翻译:
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) 
相反,右外部联接基本上是左外部联接,其中交换了外部和内部列表。 关于“喜欢”问题,对于use11ѭ,应使用
string.Contains(\"a\")
,对于
\'a%\'
应使用
string.StartsWith(\"a\")
,对于
\'%a\'
应使用
string.EndsWith(\"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;
    ,左外连接之所以如此,是因为此行:
from dept in JoinedEmpDept.DefaultIfEmpty()
即使所有员工不在部门中,也可以得到所有员工。 generated22ѭ在生成SQL时将联接转换为左外部联接。 有关更多详细信息,请参见此博客文章:C#:左外部与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()