我在SqlServer中创建了一个如下所示的表:
CREATE TABLE [dbo].[Reg](
[Reg_Id] [int] IDENTITY(1,1) NOT NULL,
[RiferimentoRRN_Reg] [int] NULL,
)
ALTER TABLE [dbo].[Reg] WITH CHECK ADD CONSTRAINT [FK_Reg_Reg] FOREIGN KEY([RiferimentoRRN_Reg])
REFERENCES [dbo].[Reg] ([Reg_Id])
正如您所看到的,单个记录可以包含来自同一个表的相关实体(<或p>)。
因此,如果RiferimentoRRN_Reg不为空,Entity Framework将创建相关的Reg实体。
如何创建仅选择具有相关实体的记录的查询(EF或SQL) 或没有任何重复实体的没有这种关系的实体?
这可能就是一个例子:
Reg_Id RiferimentoRRN_Reg
| 1 | |
| 2 | 1 |
| 3 | |
| 4 | 3 |
| 5 | |
查询结果应为:
Reg_Id RiferimentoRRN_Reg
| 2 | 1 |
| 4 | 3 |
| 5 | |
因为具有主键3和1的记录是通过外键引用的 所以必须避免它们(5从不引用,必须包含在结果集中)。
这使我可以使用Entity Framework导航属性导航到相关实体(如果存在),避免任何重复的实体。
提前致谢,希望我的解释足够明确。
答案 0 :(得分:0)
从我脑海中快速查询一下。但请注意,上面评论的JamieD77不会在此查询中处理。
SELECT D1.Reg_ID, D1.RiferimentoRRN_Reg FROM Data D1
LEFT OUTER JOIN Data D2 ON D1.Reg_ID = D2.RiferimentoRRN_Reg
WHERE D2.RiferimentoRRN_Reg IS NULL
<强>更新强>
以下查询应处理JamieDD77的评论
SELECT D1.Reg_ID, D1.RiferimentoRRN_Reg FROM Data D1
LEFT OUTER JOIN Data D2 ON D1.Reg_ID = D2.RiferimentoRRN_Reg
WHERE (D2.RiferimentoRRN_Reg IS NOT NULL AND D1.RiferimentoRRN_Reg IS NOT NULL)
OR (D2.RiferimentoRRN_Reg IS NULL)
我确定您可以轻松地将其转换为LINQ查询。