1

以下は、ASP MVC コントローラーの 1 つで使用している Linq クエリです。SQL データベースから 1 つのレコードを取得し、それをユーザーの入力と比較しようとしています。ユーザーが入力した州コードが、ユーザーが入力した製品コードに関連付けられている州コードと一致しない場合、エラー メッセージが返されます。

ただし、「コース」変数から StateCode フィールドにアクセスする方法に行き詰まっています。Visual Studio を使用すると、コードをステップ実行してそこにある値を確認できます ([ローカル] ウィンドウ/読み出しで調べている間) が、探している値を取得する方法がわかりません。

Linq を使用するのはこれが初めてなので、すべてのヘルプ/提案をいただければ幸いです。ありがとう!

                var course = from c in db.AgentContEd
                             where c.CourseCode == agentconted.CourseCode
                             select c;

                if (agentconted.StateCode.Equals(course.StateCode))
                {
                    db.AgentContEd.Add(agentconted);
                    db.SaveChanges();
                    return RedirectToAction("Details", "Agent", new { id = agentconted.SymetraNumber });
                }
                else
                {
                    ViewBag.ErrorMessaeg = "State code must match Product Training state code";
                }
4

2 に答える 2

5

IQueryable<T>代わりに単一のエンティティが必要なときに引き戻しています。クエリが結果のレコードを生成しない場合、コースは null に設定されます。複数のレコードを返すクエリは、例外をスローします。

(from c in db.AgentContEd
where c.CourseCode == agentconted.CourseCode
select c)
.SingleOrDefault();
于 2012-12-17T23:19:11.383 に答える
0

また、CourseCode が一意のキー制約によってバインドされていない場合はFirstOrDefault、クエリを使用するか、try/catch ブロックでラップする必要がありますSingleOrDefault。これは、複数の結果が返された場合にエラーがスローされるためです。

于 2012-12-17T23:24:20.417 に答える