반응형
linq : 무작위로 주문
데이터베이스에서 50 개의 다른 임의의 데이터를 얻을 때마다 코드 아래에서 어떻게 변경할 수 있습니까?
return (from examQ in idb.Exam_Question_Int_Tbl
where examQ.Exam_Tbl_ID==exam_id
select examQ).OrderBy(x=>x.Exam_Tbl_ID).Take(50);
http://msdn.microsoft.com/en-us/library/system.guid.newguid.aspx
return (from examQ in idb.Exam_Question_Int_Tbl
where examQ.Exam_Tbl_ID==exam_id
select examQ).OrderBy(x => Guid.NewGuid()).Take(50);
이것이 LINQ-to-SQL 인 경우 ORDER BY NEWID()
SELECT 문에 간단히 추가 할 수 있습니다 .
언급했듯이 Fisher-Yates Shuffle 과 같은 알고리즘을 사용하는 것이 더 나을 수 있습니다 . 여기에 구현이 있습니다. https://stackoverflow.com/a/375446/284240
컬렉션은 얼마나 큽니까? 그것들을 모두 메모리로 선택한 다음 무작위 컬렉션을 선택할 수 있습니까? 그렇다면 Is using Random 및 OrderBy의 Shuffle 알고리즘이 좋은 셔플 알고리즘입니까? 좋은 선택이 될 것입니다.
return idb.Exam_Question_Int_Tbl
.Where( e => e.Exam_Tbl_ID == exam_id )
.ToList()
.Shuffle()
.Take( 50 );
그렇지 않은 경우 newid()
( SQL Server Random Sort )로 정렬 하는 저장 프로 시저를 제안합니다 . C #의 난수 생성기를 기반으로 한 식을 LINQ to SQL / Entities로 변환하는 방법이 없다고 생각합니다.
똑같은 문제가 있다면 ...
int Limit = 24;
return (from Q in Context.table
where Q.some_key == 1234
select new classDataType() {
FirstAttribute = Q.FirstCol,
SecondAttribute = Q.SecondCol,
ThirdAttribute = Q.ThirdCol
}).ToList().OrderBy(x => Guid.NewGuid()).Take(Limit).ToList();
sql-linq 후에는 LIST 여야하므로 OrderBy-NewGuid-Method를 사용하기 전에 목록으로 변경해야 할 수도 있습니다.
return (...-SQL-SELECT-LINQ-...)
.ToList() //****
.OrderBy(x => Guid.NewGuid()).Take(Limit).ToList();
참조 URL : https://stackoverflow.com/questions/9449452/linq-order-by-random
반응형
'UFO ET IT' 카테고리의 다른 글
CodeIgniter에서 PHPUnit을 어떻게 사용합니까? (0) | 2020.12.25 |
---|---|
한 페이지에 여러 양식 또는 여러 제출이 있습니까? (0) | 2020.12.25 |
“POST git-receive-pack (청크)”에 매달려 있습니다. (0) | 2020.12.15 |
grunt.js를 구성하여 파일을 개별적으로 축소하는 방법 (0) | 2020.12.15 |
파이썬은 if의 조건을 느리게 평가합니까? (0) | 2020.12.15 |