2010-03-17 1 views
0

LINQ에서 많은 예제를 보았지만 vb.net에서 동일한 결과를 재현 할 수 없습니다.LINQ 및 Entity Framework의 임의 정렬 목록

나는 다음과 같은 코드가 있습니다

Dim context As New MyModel.Entities() 

Dim rnd As New System.Random() 

Dim gardens As List(Of Tuin) = (From t In context.Gardens Where _ 
             t.Approved = True And _ 
             Not t.Famous = True _ 
             Order By rnd.Next() _ 
             Select t).ToList() 

을하지만 컨트롤이 목록을 바인딩 할 때 나는 오류가 발생합니다. 엔티티

LINQ는 있어서 'INT32 다음() "방법을 인식하고,이 방법은 저장소 식으로 변환 될 수 없다.

이 기능을 작동시키는 방법에 대한 제안이 있으십니까?

답변

2

개체가 데이터베이스가 아닌 VB 코드에 있으므로이 쿼리에서 임의 개체를 사용할 수 없습니다.

결과를 목록에 먼저 가져온 다음 스크램블하십시오. 그것은 임의의 값에 정렬보다 피셔 - 예이츠가/크 누스 같은 스크램블링 알고리즘을 사용하는 것이 훨씬 더 효율적입니다 : 알 필요하거나 임의의 값을 정렬 또한

Dim rnd as New Random() 
For i As Integer = gardens.Count To 2 Step -1 
    Dim pos As Integer = rnd.Next(i) 
    Dim x = gardens(i - 1) 
    gardens(i - 1) = gardens(pos) 
    gardens(pos) = x 
Next 

, 그 절대 그런 일 없을 정렬 알고리즘 주어진 두 항목 사이의 관계를 재평가하거나 정렬을 통해 동일한 값을 사용하도록 각 항목에 임의의 값을 지정해야합니다. 시도한 방법이 가능하다면 browser choise 페이지와 같은 나쁜 결과를 가져올 수 있습니다.