LINQ to SQL Left Join with empty left part
LINQ to SQL Left Join with empty left part
我有一个方法:
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
两个 return 正确的结果。
为什么执行第二个查询?
第一个是从数据库中获取 aEntities
和 bEntities
。第二个已经在您传入的数组中包含 aEntities
,只需从数据库中获取 bEntities
,然后在代码中加入。
我有一个方法:
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
两个 return 正确的结果。
为什么执行第二个查询?
第一个是从数据库中获取 aEntities
和 bEntities
。第二个已经在您传入的数组中包含 aEntities
,只需从数据库中获取 bEntities
,然后在代码中加入。