它返回第一个集合中的所有元素,无论它是否在第二个集合中有相关元素。在 LINQ 中,通过对分组联接的结果调用 DefaultIfEmpty()方法来执行左外部联接。DefaultIfEmpty()方法从列表中获取指定元素。如果列表为空,则返回默认值。
通俗来说,就是使用此方法,返回第一个集合中所有元素,假如第一个集合中的值在其他集合中不存在,则可以使用空来进行代替,实现第一集合全部数据的显示。而如果使用普通的查询,则仅可以查询出在其他集合存在的数据,即存在相等显示,不相等不显示。
这里用到一个函数
DefaultIfEmpty():如果为空则使用默认值代替,默认值为 NULL
例:
from p in await _CarMaintainRepository.GetListAsync()
join d in await _CarDriverRepository.GetListAsync() on p.Ma_Driver equals d.Id into temp1
from t1 in temp1.DefaultIfEmpty()
select new Maintain_Dri_Dto
{
Id = p.Id.ToString(),
AddTime = p.AddTime,
Ma_ActualPrice = p.Ma_ActualPrice,
Ma_Mileage = p.Ma_Mileage,
Ma_Post = p.Ma_Post,
Ma_Price = p.Ma_Price,
Ma_Remark = p.Ma_Remark,
Ma_State = p.Ma_State,
Ma_Time = p.Ma_Time,
Ma_Driver = p.Ma_Driver.ToString(),
Ma_DriverName = t1.IsEmpty()?"":t1.Dri_Name
}