반응형
EF 코드 우선 : 임의의 행을 얻는 방법
임의의 행을 검색하는 쿼리를 어떻게 작성할 수 있습니까?
SQL로 작성하면 newid ()에 의해 주문하고 상단에서 n 개의 행을 잘라냅니다. 어쨌든 EF 코드에서 이것을 먼저 수행합니까?
newid ()를 사용하는 쿼리를 만들고 DbSet.SqlQuery ()를 사용하여 실행하려고했습니다. 작동하는 동안 가장 깨끗한 솔루션은 아닙니다.
또한 모든 행을 검색하고 새 GUID로 정렬했습니다. 행 수가 상당히 적지 만 여전히 좋은 솔루션은 아닙니다.
어떤 아이디어?
전화 :
something.OrderBy(r => Guid.NewGuid()).Take(5)
두 가지 옵션 비교 :
건너 뛰기 (무작위 행 수)
방법
private T getRandomEntity<T>(IGenericRepository<T> repo) where T : EntityWithPk<Guid> {
var skip = (int)(rand.NextDouble() * repo.Items.Count());
return repo.Items.OrderBy(o => o.ID).Skip(skip).Take(1).First();
}
- 2 개의 쿼리를받습니다.
생성 된 SQL
SELECT [GroupBy1].[A1] AS [C1]
FROM (SELECT COUNT(1) AS [A1]
FROM [dbo].[People] AS [Extent1]) AS [GroupBy1];
SELECT TOP (1) [Extent1].[ID] AS [ID],
[Extent1].[Name] AS [Name],
[Extent1].[Age] AS [Age],
[Extent1].[FavoriteColor] AS [FavoriteColor]
FROM (SELECT [Extent1].[ID] AS [ID],
[Extent1].[Name] AS [Name],
[Extent1].[Age] AS [Age],
[Extent1].[FavoriteColor] AS [FavoriteColor],
row_number() OVER (ORDER BY [Extent1].[ID] ASC) AS [row_number]
FROM [dbo].[People] AS [Extent1]) AS [Extent1]
WHERE [Extent1].[row_number] > 15
ORDER BY [Extent1].[ID] ASC;
Guid
방법
private T getRandomEntityInPlace<T>(IGenericRepository<T> repo) {
return repo.Items.OrderBy(o => Guid.NewGuid()).First();
}
생성 된 SQL
SELECT TOP (1) [Project1].[ID] AS [ID],
[Project1].[Name] AS [Name],
[Project1].[Age] AS [Age],
[Project1].[FavoriteColor] AS [FavoriteColor]
FROM (SELECT NEWID() AS [C1],
[Extent1].[ID] AS [ID],
[Extent1].[Name] AS [Name],
[Extent1].[Age] AS [Age],
[Extent1].[FavoriteColor] AS [FavoriteColor]
FROM [dbo].[People] AS [Extent1]) AS [Project1]
ORDER BY [Project1].[C1] ASC
참고 URL : https://stackoverflow.com/questions/7781893/ef-code-first-how-to-get-random-rows
반응형
'Programing' 카테고리의 다른 글
Java 생성자 스타일 : 검사 매개 변수가 null이 아닙니다. (0) | 2020.11.07 |
---|---|
UITableView에서 테이블 헤더의 높이를 설정하는 방법은 무엇입니까? (0) | 2020.11.07 |
mongoose가 응용 프로그램에서 실행하는 모든 쿼리를 기록합니다. (0) | 2020.11.07 |
사용자 데이터 업데이트-ASP.NET ID (0) | 2020.11.07 |
TypeScript 내보내기 가져온 인터페이스 (0) | 2020.11.07 |