这个EF Join方法调用出了什么问题?

时间:2011-01-03 20:06:03

标签: c# linq entity-framework-4

我目前仅限于在EF4数据存储库上使用扩展方法;我不能使用linq来EF。我正在努力做一个简单的3表连接工作。这是代码:

var query = _readOnlyRepository.All<Parent>()
            .Where( p => p.Something == "something" )
            .Join( _readOnlyRepository.All<Child>(), // Child entity
                p => p.ParentID,                     // Parent Key
                c => c.ChildId,                      // Child Key
                ( p, c ) => c )                      // Projection
            .Join( _readOnlyRepository.All<GrandChild>(),
                c => m.ChildID,
                g => g.GrandChildID,
                ( c, g ) => g )
            .Select( joined => joined.Child.Whatever );  

这是(基本上)生成的SQL:

select c2.Whatever
from Parent p
inner join Child c on p.ParentId = c.ParentId
inner join GrandChild g on c.ChildId = g.ChildId
left outer join Child c2 on g.ChildId = c2.ChildId
where ( "something" = p.Something )  

我可以在代码中更改哪些内容以消除使查询意图无效的左外连接?

1 个答案:

答案 0 :(得分:2)

我不清楚你究竟要回归的是什么 - GrandChild的无论什么属性?您的第二个联接返回GrandChild对象( c, g ) => g,所以我认为您只需要

.Select( joined => joined.Whatever );   

因为joined是GrandChild对象。