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 正确的结果。

为什么执行第二个查询?

第一个是从数据库中获取 aEntitiesbEntities。第二个已经在您传入的数组中包含 aEntities,只需从数据库中获取 bEntities,然后在代码中加入。