表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。
答案 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-。