我有一个方法:

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


两者都返回正确的结果。

为什么执行第二个查询?

最佳答案

第一个是从数据库中获取aEntitiesbEntities。第二个在您传入的数组中已经有aEntities了,只需要从数据库中获取bEntities,然后执行联接代码即可。

关于c# - LINQ to SQL Left Join的左侧为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28963704/

10-11 00:41