2

我已经基于仅包含一对键值的第三个表在两个表之间建立了多对多关联。现在我想做一个查询,将右表键值按左分组,而不需要其他数据。

LeftTable { LeftID, LeftField1, LeftField2 } 
JoinTable { LeftID, RightID} 
RightTable { RightID, RightField1, RightField2 }

有什么方法可以基本上只查询 JoinTable 并获取由“LeftIDs”分组的所有“RightIDs”,而无需 SQL 尝试从任一侧获取字段?JoinTable 本身不是模型中的实体,而是映射到关联。

我已经对使用 ObjectQuery 和 EntityCommand (ESQL) 进行了一些试验,并且两者似乎仍然通过加入我不需要的 RightTable 加载到其他字段中。

我的 ESQL 看起来像:

SELECT lt.LeftID, (SELECT rt.RightID
FROM NAVIGATE(lt, MyModel.LeftToRightAssoc, RightTable) as rt)
FROM MyEntities.LeftTable as lt;

但生成的 SQL 仍在 RightField1 和 RightField2 中获取。

当然必须有一个更简单的方法来做到这一点?

4

1 回答 1

1

假设您的类Left具有导航属性RightsRight实体集合),您可以尝试以下操作:

var list = context.Lefts.Select(l => new
{
    LeftId = l.LeftId,
    RightIds = l.Rights.Select(r => r.RightId)
});

foreach (var item in list)
{
    Console.WriteLine("LeftId = {0}", item.LeftId);
    foreach (var rightId in item.RightIds)
    {
        Console.WriteLine("RightId = {0}", rightId);
    }
}

你会得到一个匿名类型对象的集合,其中每个元素都有LeftId和对应的RightIds. 此查询不应触及其他字段RightField1,例如 等。您还可以创建自己的自定义类型,然后在上面的查询中投影到此类型中,而不是匿名类型。

于 2011-05-23T15:51:40.800 回答