0

候補者がすでに試みた質問を取得するためのクエリと、候補者が試みていない質問のための別のクエリを設計するのに非常に苦労しています。これは、試験/テスト/フォーム/調査タイプのアプリケーション用です。

スキーマ

シナリオは、候補 (OAS_UserDetail) が多くのグループ (OAS_Group) に関連付けられています。1 つのグループに多くのテストを含めることができます。テストには多くの問題が含まれる場合があります。質問には多くの選択肢があります。

候補者が質問を試みると、セッションへの参照を持つテーブル TestResponse に保存されます (テーブル TestResponse の answerSelected は、実際には QuestionOption.Id です)。TestSession は、TestResponse がユーザー、テスト、およびグループの詳細を取得するためのブリッジとして機能できると思います。

これは、Linq を介したクエリに関する限り、私にとっては良いがやや複雑な設計のように思えます。以下は私がやろうとしたことで、動けなくなり、Linq をクエリ構文ではなくメソッド構文で書くことになりました。

OAS.DataModels.OAS_Question questionsAttempted = 
            from q in db.OAS_Questions
            where q.OAS_Test.OAS_Group.Candidates.Contains(
                      db.OAS_UserDetails.Single(u => u.UserName == HttpContext.User.Identity.Name)
            )                         
            select q;
4

2 に答える 2

0

TestResponseしたがって、選択肢が候補者の記録にある、またはない候補者の質問を探しています。私はこれがうまくいくと思います:

(from u in OAS_UserDetail
from g in u.OAS_Group
from t in g.OAS_Test
from q in t.OAS_Question
from o in q.OAS_QuestionOption
where u.Id == userId // a variable
where u.OAS_TestSession
      .SelectMany(s => s.OAS_TestResponse)
      .Select(r => r.AnswerSelectedId).Contains(o.Id)
select q).Distinct()

候補者が試みなかった質問については、次のとおりです。where !u.OAS_TestSession...

于 2013-03-15T20:57:18.930 に答える
0

Linq クエリ構文は SQL と非常によく似ています。「結合」演算子を使用して、必要なことを実行できるはずです。

概要は次のとおりです。

http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

于 2013-03-15T18:20:03.950 に答える