1

下午,

任何人都可以看到为什么我的查询没有返回随机的 6 个项目吗?

 public class GetQuestions
 {
   public int qId { get; set; }
   public string question { get; set; }
   public string answer1 { get; set; }
   public string answer2 { get; set; }
   public string answer3 { get; set; }
}

  [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public List<GetQuestions> Questions()
    {
        using (QuizDataContext dc = new QuizDataContext())
        {
            var query = from q in dc.tblquizs
                        orderby Guid.NewGuid()
                        select new GetQuestions
                        {
                            qId = q.id,
                            question = q.q,
                            answer1 = q.a1,
                            answer2 = q.a2,
                            answer3 = q.a3,
                        };
            return query.Take(6).ToList();
        }

更新添加 GetQuestions 类

4

4 回答 4

0

我使用以下代码来解决此问题。

 var qry = from q in dc.tblwhiskysprintquizs.AsEnumerable()
                      orderby Guid.NewGuid()
                      select new GetQuestions
                        {
                            qId = q.id,
                            question = q.q,
                            answer1 = q.a1,
                            answer2 = q.a2,
                            answer3 = q.a3,
                        };
            return qry.Take(6).ToList();

就像在查找中添加 .AsEnumerable 一样简单。

于 2012-07-25T08:13:27.113 回答
0

你不能通过使用获得随机顺序

orderby Guid.NewGuid()

您可以通过执行以下查询并查看结果来对此进行测试:

from q in dc.tblquizs
select Guid.NewGuid()
于 2012-07-23T13:57:25.677 回答
0

Entity Framework 4.3.1 会将 Guid.NewGuid() 调用转换为 newid() - 如果您的 DAL 支持,这绝对是首选方法。但是,您使用的任何 DAL 都可能无法正确转换调用(在这种情况下,它可能会在发送到数据库服务器之前被转换为 GUID,从而产生用于排序的静态值)。您应该使用数据库分析器来查看您的 DAL 正在做什么。

如果 Guid.NewGuid 调用未正确转换为 newid(),您还有另外两个选择:

  1. 使用存储过程
  2. 使用下面的 LINQ 之类的东西(作为最后的手段)

        var context = new ScratchContext();
        var products = new List<Product>();
        for (int i = 0; i < num; i++)
        {
            Product product = null;
            while (product == null)
            {
                int randomId = r.Next(context.Products.Count());
                product = context.Products.FirstOrDefault(p => p.ID == randomId);
            }
            products.Add(product);
        }
        return products.AsQueryable();
    
于 2012-07-23T15:29:01.287 回答
-1
orderby Guid.NewGuid()  

生成数据库中可能不存在的随机数

于 2012-07-23T14:00:40.560 回答