我有一个方法:
public Result[] LeftJoin(IQueryable<AEntities> aEntities)
{
var bEntities = ReaderContext.GetContracts<BEntities>();
var queryable = from a in aEntities
join bEntity in bEntities on a.BId equals bEntity.Id into bTemp
from b in bTemp.DefaultIfEmpty()
select new Result { A = a, B = b };
return ReaderContext.Select(queryable);
}
当我调用
LeftJoin(ReaderContext.GetContracts<AEntities>())
时,将执行以下SQL查询:SELECT * FROM A
LEFT OUTER JOIN B ON A.BId = B.Id
当我调用
LeftJoin(new AEntities[0].AsQueryable())
时,将执行以下SQL查询:SELECT * FROM B
两者都返回正确的结果。
为什么执行第二个查询?
最佳答案
第一个是从数据库中获取aEntities
和bEntities
。第二个在您传入的数组中已经有aEntities
了,只需要从数据库中获取bEntities
,然后执行联接代码即可。
关于c# - LINQ to SQL Left Join的左侧为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28963704/