내가 사용하는 랜덤 Linq2SQL 결과 정렬 구현하기 위해 다음무작위 Linq2SQl 쿼리
partial class OffertaDataContext
{
[Function(Name = "NEWID", IsComposable = true)]
public Guid Random()
{
throw new NotImplementedException();
}
}
다음 쿼리에서 :
IEnumerable<Enquirys> visibleOnSite = Enquirys.Where(e =>
e.EnquiryPublished != null &&
e.Status != 0 &&
e.Status != 3 &&
e.Status != 4 &&
e.Status != 5
);
var linq = (
from e in db.EnquiryAreas
from w in db.WorkTypes
where
e.SeoPriority != 0 &&
e.HumanId != null &&
w.SeoPriority != 0 &&
e.HumanId != null &&
e.SeoPriority * w.SeoPriority > 20 &&
visibleOnSite.Any(f => f.WhereId == e.Id && f.WhatId == w.Id)
select new
{
HWhereId = e.Id,
WhereDescription = e.DescriptionText,
HWhatId = e.Id,
WhatDescription = e.DescriptionText
}
).OrderBy(e => db.Random()).Take(14);
나는 SQL 결과에 문제가를 :
SELECT [t3].[Id] AS [HWhereId], [t3].[DescriptionText] AS [WhereDescription], [t3].[Id2] AS [HWhatId], [t3].[DescriptionText2] AS [WhatDescription]
FROM (
SELECT TOP (7) [t0].[Id], [t0].[DescriptionText], [t1].[Id] AS [Id2], [t1].[DescriptionText] AS [DescriptionText2]
FROM [dbo].[EnquiryAreas] AS [t0], [dbo].[WorkTypes] AS [t1]
WHERE ([t0].[SeoPriority] <> 0) AND ([t0].[HumanId] IS NOT NULL) AND ([t1].[SeoPriority] <> 0) AND ([t0].[HumanId] IS NOT NULL) AND (([t0].[SeoPriority] * [t1].[SeoPriority]) > 20) AND (EXISTS(
SELECT NULL AS [EMPTY]
FROM [dbo].[Enquirys] AS [t2]
WHERE ([t2].[EnquiryPlace] = ([t0].[Id])) AND ([t2].[EnquiryWorkType] = ([t1].[Id])) AND ([t2].[EnquiryPublished] IS NOT NULL) AND ([t2].[Status] <> 0) AND ([t2].[Status] <> 3) AND ([t2].[Status] <> 4) AND ([t2].[Status] <> 5)
))
ORDER BY NEWID()
) AS [t3]
ORDER BY NEWID()
내부 ORDER BY NEWID()를 제거하면 모든 것이 잘 작동합니다. 두 가지 모두를 사용하면 쿼리를 완료하는 데 너무 오래 걸립니다. 내 Linq2SQL을 수정하여 외부 ORDER BY NEWID() 만 수행 할 수있는 방법이 있습니까? 그렇지 않은 경우 다른 해결 방법은 무엇입니까? 무작위로 구현하는 다른 방법은?
나는 다른 결과를 얻으 려 할 때 내적 질서를 제거 할 때 모든 것이 잘되지 않는다고 제안합니다. 당신이 선택에서 상위 #을 사용하는 경우 주문을 필요로하거나 결과가 실행마다 일관성이 없습니다. 반면에, 나는 이것이 파생 된 테이블이 될 이유가 전혀 없다고 봅니다. – HLGEM