1

現在、コントローラーの1つにLINQクエリを記述しており、対応するコメントとトピックを含む単一のブログ投稿(モデルに基づく)を返したいと考えています。

これは、ホームページのすべてのブログ投稿のリストを返すために使用したクエリとして現在持っているものです。「wherep.id==id(これは、正しい投稿をフェッチするためにActionResultによって取り込まれるパラメーターです)を追加しました。

var post = from p in db.Set<BlogPost>()
                   where p.id == id
                   select new PostViewModel
                              {
                                  Id = p.id,
                                  Title = p.Title,
                                  DateCreated = p.DateCreated,
                                  Content = p.Content,
                                  Topics = p.Topics,
                                  Comments = p.Comments,
                                  CommentCount = p.Comments.Count
                              };

return View(post);

現在、単一の投稿にしたいだけの場合、リターンはIQueryableを送信しています。現在、かみそりのビューにforeachがありますが、これは役に立たず、間違っていますが、機能します。どうすればこれを変更して自分のやりたいことを実行できますか?

4

5 に答える 5

2

できるよ:

return View(post.SingleOrDefault());

または、ケースリストが空の場合に例外を設定する場合は、次のようにします。

return View(post.Single());
于 2012-04-27T20:45:37.457 に答える
1

First()またはSingle()(コンテキストに応じてどちらが適切か)をクエリに追加するだけです。

return View(post.First());
于 2012-04-27T20:45:07.263 に答える
1

ただそれをするだけでうまくpost.First()いくはずです。実際には、具体的な値を生成するすべての関数が機能します。First、、、、、、またはFirstOrDefault_ Single_ SingleOrDefault_ToListToArray

それぞれの方法へのリンクを含めたので、何が効果的かを確認できます。複数の投稿がプルされた場合にエラーが必要かどうかに応じて、FirstまたはSingleのバリエーションが必要になるようです。

于 2012-04-27T20:45:28.683 に答える
1

FirstまたはSingleを使用したいようです。

return View(post.Single());

それらの違いは、Single一致する行が複数見つかった場合に例外がスローされることです。

于 2012-04-27T20:45:37.007 に答える
0

LINQをこれに置き換えます

var post = (from p in db.Set<BlogPost>()
               where p.id == id
               select new PostViewModel
                          {
                              Id = p.id,
                              Title = p.Title,
                              DateCreated = p.DateCreated,
                              Content = p.Content,
                              Topics = p.Topics,
                              Comments = p.Comments,
                              CommentCount = p.Comments.Count
                          }).FirstOrDefault();
于 2012-04-27T21:02:36.573 に答える