Entity Framework를 사용하여 데이터베이스를 쿼리하고 있습니다. 결과를 제한하기 위해 Take (1000)를 사용하고 있습니다. 문제는 EF가 1000 개가 넘는 행을 반환하고 # 1000 이후의 모든 엔티티에 올바른 데이터가 없다는 것입니다.Take()가 지정된 것보다 많은 행을 반환하는 이유는 무엇입니까?
이 테이블 구조입니다 :
그리고 쿼리는 다음과 같습니다
var resultListTmp = db.TinglysEjendom.Where(x => x.EjdStatus == description)
.Include(x => x.TinglysEjd_ESR.Select(y => y.ESR))
.Include(nameof(TingLysMatrikkel))
.Take(amount).AsNoTracking().ToList();
# 1000 결국 TinglysEjendom 엔티티는 어떤 TinglysMatrikkel 관계를하지 않아도 문제는, 그러나 그들은 데이터베이스에서합니다.
제거 : 쿼리에서
.Include(x => x.TinglysEjd_ESR.Select(y => y.ESR))
는 EF 행의 정확한 수를 반환합니다.
TinglysMatrikkel 테이블의 열 MatrikkelNummer
는 (다른 사람의 사이에) 값을 취할 수 있습니다는 æ는
å ø 누군가는이 국제화 "국제화 및 현지화"문제가 될 수 있습니다 제안했다. 어떻게 이런 일이 있을지 모르겠다. 어쩌면 누군가가 올바른 방향으로 나를 가리킬 수 있습니까? 사전LINQ에서
덕분에 위의 쿼리를 번역 :
exec sp_executesql N'SELECT
[UnionAll1].[EjdId] AS [C1],
[UnionAll1].[EjdId1] AS [C2],
[UnionAll1].[EjdType] AS [C3],
[UnionAll1].[BygningsNr] AS [C4],
[UnionAll1].[TimeshareNr] AS [C5],
[UnionAll1].[AnpartsNr] AS [C6],
[UnionAll1].[EjerLejNr] AS [C7],
[UnionAll1].[Beskrivelse] AS [C8],
[UnionAll1].[StreetBuildingIdentifier] AS [C9],
[UnionAll1].[EjdStatus] AS [C10],
[UnionAll1].[StatusTimestamp] AS [C11],
[UnionAll1].[IAbonnement] AS [C12],
[UnionAll1].[AbonnementOpretAttempts] AS [C13],
[UnionAll1].[AbonnementsId] AS [C14],
[UnionAll1].[BestemtFastEjendomsNummer] AS [C15],
[UnionAll1].[UpdateToken] AS [C16],
[UnionAll1].[FaellesEjendomIdentifikator] AS [C17],
[UnionAll1].[C1] AS [C18],
[UnionAll1].[ESRId] AS [C19],
[UnionAll1].[ESRId1] AS [C20],
[UnionAll1].[EjdId2] AS [C21],
[UnionAll1].[Passiv] AS [C22],
[UnionAll1].[ESRId2] AS [C23],
[UnionAll1].[EjdId3] AS [C24],
[UnionAll1].[ESRId3] AS [C25],
[UnionAll1].[ESR_Kommune] AS [C26],
[UnionAll1].[ESR_EjdNummer] AS [C27],
[UnionAll1].[UdgaaetCognito] AS [C28],
[UnionAll1].[Status] AS [C29],
[UnionAll1].[C2] AS [C30],
[UnionAll1].[C3] AS [C31],
[UnionAll1].[C4] AS [C32],
[UnionAll1].[C5] AS [C33]
FROM (SELECT
CASE WHEN ([Join1].[ESRId1] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1],
[Limit1].[EjdId] AS [EjdId],
[Limit1].[EjdId] AS [EjdId1],
[Limit1].[EjdType] AS [EjdType],
[Limit1].[BygningsNr] AS [BygningsNr],
[Limit1].[TimeshareNr] AS [TimeshareNr],
[Limit1].[AnpartsNr] AS [AnpartsNr],
[Limit1].[EjerLejNr] AS [EjerLejNr],
[Limit1].[Beskrivelse] AS [Beskrivelse],
[Limit1].[StreetBuildingIdentifier] AS [StreetBuildingIdentifier],
[Limit1].[EjdStatus] AS [EjdStatus],
[Limit1].[StatusTimestamp] AS [StatusTimestamp],
[Limit1].[IAbonnement] AS [IAbonnement],
[Limit1].[AbonnementOpretAttempts] AS [AbonnementOpretAttempts],
[Limit1].[AbonnementsId] AS [AbonnementsId],
[Limit1].[BestemtFastEjendomsNummer] AS [BestemtFastEjendomsNummer],
[Limit1].[UpdateToken] AS [UpdateToken],
[Limit1].[FaellesEjendomIdentifikator] AS [FaellesEjendomIdentifikator],
[Join1].[ESRId1] AS [ESRId],
[Join1].[ESRId1] AS [ESRId1],
[Join1].[EjdId] AS [EjdId2],
[Join1].[Passiv] AS [Passiv],
[Join1].[ESRId1] AS [ESRId2],
[Join1].[EjdId] AS [EjdId3],
[Join1].[ESRId2] AS [ESRId3],
[Join1].[ESR_Kommune] AS [ESR_Kommune],
[Join1].[ESR_EjdNummer] AS [ESR_EjdNummer],
[Join1].[UdgaaetCognito] AS [UdgaaetCognito],
[Join1].[Status] AS [Status],
CAST(NULL AS int) AS [C2],
CAST(NULL AS varchar(1)) AS [C3],
CAST(NULL AS varchar(1)) AS [C4],
CAST(NULL AS int) AS [C5]
FROM (SELECT TOP (1000)
[Extent1].[EjdId] AS [EjdId],
[Extent1].[EjdType] AS [EjdType],
[Extent1].[BygningsNr] AS [BygningsNr],
[Extent1].[TimeshareNr] AS [TimeshareNr],
[Extent1].[AnpartsNr] AS [AnpartsNr],
[Extent1].[EjerLejNr] AS [EjerLejNr],
[Extent1].[Beskrivelse] AS [Beskrivelse],
[Extent1].[StreetBuildingIdentifier] AS [StreetBuildingIdentifier],
[Extent1].[EjdStatus] AS [EjdStatus],
[Extent1].[StatusTimestamp] AS [StatusTimestamp],
[Extent1].[IAbonnement] AS [IAbonnement],
[Extent1].[AbonnementOpretAttempts] AS [AbonnementOpretAttempts],
[Extent1].[AbonnementsId] AS [AbonnementsId],
[Extent1].[BestemtFastEjendomsNummer] AS [BestemtFastEjendomsNummer],
[Extent1].[UpdateToken] AS [UpdateToken],
[Extent1].[FaellesEjendomIdentifikator] AS [FaellesEjendomIdentifikator]
FROM [dbo].[TinglysEjendom] AS [Extent1]
WHERE [Extent1].[EjdStatus] = @p__linq__0) AS [Limit1]
LEFT OUTER JOIN (SELECT [Extent2].[ESRId] AS [ESRId1], [Extent2].[EjdId] AS [EjdId], [Extent2].[Passiv] AS [Passiv], [Extent3].[ESRId] AS [ESRId2], [Extent3].[ESR_Kommune] AS [ESR_Kommune], [Extent3].[ESR_EjdNummer] AS [ESR_EjdNummer], [Extent3].[UdgaaetCognito] AS [UdgaaetCognito], [Extent3].[Status] AS [Status]
FROM [dbo].[TinglysEjd_ESR] AS [Extent2]
INNER JOIN [dbo].[ESR] AS [Extent3] ON [Extent2].[ESRId] = [Extent3].[ESRId]) AS [Join1] ON [Limit1].[EjdId] = [Join1].[EjdId]
UNION ALL
SELECT
2 AS [C1],
[Limit2].[EjdId] AS [EjdId],
[Limit2].[EjdId] AS [EjdId1],
[Limit2].[EjdType] AS [EjdType],
[Limit2].[BygningsNr] AS [BygningsNr],
[Limit2].[TimeshareNr] AS [TimeshareNr],
[Limit2].[AnpartsNr] AS [AnpartsNr],
[Limit2].[EjerLejNr] AS [EjerLejNr],
[Limit2].[Beskrivelse] AS [Beskrivelse],
[Limit2].[StreetBuildingIdentifier] AS [StreetBuildingIdentifier],
[Limit2].[EjdStatus] AS [EjdStatus],
[Limit2].[StatusTimestamp] AS [StatusTimestamp],
[Limit2].[IAbonnement] AS [IAbonnement],
[Limit2].[AbonnementOpretAttempts] AS [AbonnementOpretAttempts],
[Limit2].[AbonnementsId] AS [AbonnementsId],
[Limit2].[BestemtFastEjendomsNummer] AS [BestemtFastEjendomsNummer],
[Limit2].[UpdateToken] AS [UpdateToken],
[Limit2].[FaellesEjendomIdentifikator] AS [FaellesEjendomIdentifikator],
CAST(NULL AS int) AS [C2],
CAST(NULL AS int) AS [C3],
CAST(NULL AS int) AS [C4],
CAST(NULL AS bit) AS [C5],
CAST(NULL AS int) AS [C6],
CAST(NULL AS int) AS [C7],
CAST(NULL AS int) AS [C8],
CAST(NULL AS int) AS [C9],
CAST(NULL AS int) AS [C10],
CAST(NULL AS bit) AS [C11],
CAST(NULL AS varchar(1)) AS [C12],
[Extent5].[EjdId] AS [EjdId2],
[Extent5].[LandsEjerlavKode] AS [LandsEjerlavKode],
[Extent5].[MatrikkelNummer] AS [MatrikkelNummer],
[Extent5].[EjdId] AS [EjdId3]
FROM (SELECT TOP (1000)
[Extent4].[EjdId] AS [EjdId],
[Extent4].[EjdType] AS [EjdType],
[Extent4].[BygningsNr] AS [BygningsNr],
[Extent4].[TimeshareNr] AS [TimeshareNr],
[Extent4].[AnpartsNr] AS [AnpartsNr],
[Extent4].[EjerLejNr] AS [EjerLejNr],
[Extent4].[Beskrivelse] AS [Beskrivelse],
[Extent4].[StreetBuildingIdentifier] AS [StreetBuildingIdentifier],
[Extent4].[EjdStatus] AS [EjdStatus],
[Extent4].[StatusTimestamp] AS [StatusTimestamp],
[Extent4].[IAbonnement] AS [IAbonnement],
[Extent4].[AbonnementOpretAttempts] AS [AbonnementOpretAttempts],
[Extent4].[AbonnementsId] AS [AbonnementsId],
[Extent4].[BestemtFastEjendomsNummer] AS [BestemtFastEjendomsNummer],
[Extent4].[UpdateToken] AS [UpdateToken],
[Extent4].[FaellesEjendomIdentifikator] AS [FaellesEjendomIdentifikator]
FROM [dbo].[TinglysEjendom] AS [Extent4]
WHERE [Extent4].[EjdStatus] = @p__linq__0) AS [Limit2]
INNER JOIN [dbo].[TingLysMatrikkel] AS [Extent5] ON [Limit2].[EjdId] = [Extent5].[EjdId]) AS [UnionAll1]
ORDER BY [UnionAll1].[EjdId1] ASC, [UnionAll1].[C1] ASC',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'HentData'
답변 해 주셔서 감사합니다. 쿼리에 ORDER BY를 넣으면 문제가 해결됩니다. 나는 그것을 버그로 신고 할 것이다. – Kenci
관심이있는 경우 TinglysEjendom 테이블에 두 개의 인덱스가 있습니다. # 1 - Non Unique, Non Clustered # 2 - Clustered. – Kenci