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

Entity Framework 4.3.1は、Guid.NewGuid()呼び出しをnewid()に変換します。これは、DALがサポートしている場合は、間違いなく推奨される方法です。ただし、使用しているDALが呼び出しを適切に変換しない可能性があります(この場合、データベースサーバーに送信される前にGUIDに変換され、順序付けの静的な値になる可能性があります)。DALが何をしているかを確認するには、データベースプロファイラーを使用する必要があります。

Guid.NewGuid呼び出しがnewid()に正しく変換されない場合は、他に2つのオプションがあります。

  1. sprocを使用する
  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 に答える
0

を使用してランダムな順序を取得することはできません

orderby Guid.NewGuid()

これをテストするには、次のクエリを実行して結果を確認します。

from q in dc.tblquizs
select Guid.NewGuid()
于 2012-07-23T13:57:25.677 に答える
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 に答える
-1
orderby Guid.NewGuid()  

データベースに存在しない可能性のある乱数を生成します

于 2012-07-23T14:00:40.560 に答える