如何在EF Code First中查询连接表?

时间:2012-02-28 20:51:41

标签: c# .net entity-framework ef-code-first

表A和B之间有很多关系。

由于我首先使用代码,因此自动创建了DB表'AB'。我没有实体模型。

例如,我如何查询属于A.id=x的所有B?

编辑:

加载A或B后,我可以轻松地分别获得对列表B和A的引用。

我真正的问题是制作一个排除已经与A关联的所有B的查询。

这就是我想要做的事情:

query.Where(**b.ID NOT IN (SELECT B.ID FROM AB WHERE A=5)** )

我确信我可以使用原始SQL查询执行此操作,但我希望保持一致并尽可能使用IQueryable / LINQ。

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

var bsNotAssociatedWithA5 = context.Bs
    .Where(b => !b.As.Any(a => a.Id == 5))
    .ToList();

它创建以下SQL:

SELECT 
[Extent1].[BId] AS [BId], 
[Extent1].[BColumn1] AS [BColumn1], 
// more columns
FROM [dbo].[Bs] AS [Extent1]
WHERE NOT EXISTS
    (SELECT 1 AS [C1]
     FROM [dbo].[ABs] AS [Extent2]
     WHERE ([Extent1].[BId] = [Extent2].[BId]) AND (5 = [Extent2].[AId]))

修改

使用DbContext(EF> = 4.1)时,您可以使用ToString()的{​​{1}}来检查SQL:

IQueryable

答案 1 :(得分:1)

A.Bs

如果您有A的实例,您应该在A类中拥有一个属性来从A中检索所有B-。