我有一个方法:
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
两者都返回正确的结果。
为什么执行第二个查询?
答案 0 :(得分:3)
第一个是从数据库获取aEntities
和bEntities
。第二个已经传入的数组中有aEntities
,只需从数据库中获取bEntities
,然后在代码中进行连接。