【问题标题】:Random sort list with LINQ and Entity Framework使用 LINQ 和实体框架的随机排序列表
【发布时间】:2010-03-17 15:58:33
【问题描述】:

我在 LINQ 中看到了很多示例,但我无法在 vb.net 中重现相同的结果。

我有以下代码:

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 to Entities 无法识别 方法“Int32 Next()”方法,以及 这个方法不能翻译成 商店表达式。

关于如何让它工作的任何建议?

【问题讨论】:

    标签: .net vb.net linq entity-framework linq-to-entities


    【解决方案1】:

    您不能在这样的查询中使用 Random 对象,因为该对象存在于您的 VB 代码中,而不是数据库中。

    先将结果放入列表中,然后对其进行打乱。使用像 Fischer-Yates/Knuth 这样的加扰算法比对随机值进行排序更有效:

    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 页面相同的糟糕结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      相关资源
      最近更新 更多