1

私はここで新しく、何年もの間これにいて、私は問題を解決することができません。ShowAllReviewコントローラーに次のコードがあります。

 public ActionResult Index(string Ordering, string WordFilter, string DisplaySearchResults, int? CounterForPage)
        {
            using (var db = new gamezoneDBEntities())
            {

                ViewBag.Message = TempData["message"];
                ViewBag.CurrentSort = Ordering;
                ViewBag.NameSortParm = String.IsNullOrEmpty(Ordering) ? "GameName" : "";
                ViewBag.DateSortParm = Ordering == "ReleaseYearOfGame" ? "DiscriptionOfGame" : "Date";


                {
                    TempData["DisplaySearchResult"] = DisplaySearchResults;

                    {
                        ViewBag.search = DisplaySearchResults;
                    }
                    if (Request.HttpMethod == "GET")
                    {
                        DisplaySearchResults = WordFilter;
                    }
                    else if (DisplaySearchResults == "")
                    {
                        ViewData["MyMessage"] = "Nothing Has Been Entered.";

                    }

                    else
                    {
                        CounterForPage = 1;
                    }

                    ViewBag.CurrentFilter = DisplaySearchResults;


                    var FullDatabaseItem = from b in db.tblReviews.Include(x => x.tblGame)
                                           select b;



                    if (!String.IsNullOrEmpty(DisplaySearchResults))
                    {

                        FullDatabaseItem = FullDatabaseItem.Include (x => x.tblGame)
                       .Where (b => b.Score.ToUpper().Contains(DisplaySearchResults.ToUpper()));

                    }

                    switch (Ordering)
                    {
                        case "HeadlineName":
                            FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.Score);
                            break;
                        case "DatePosted":
                            FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.Recomendation);
                            break;
                        case "DiscriptionDate":
                            FullDatabaseItem = FullDatabaseItem.OrderBy(b => b.Recomendation);
                            break;
                        default:
                            FullDatabaseItem = FullDatabaseItem.OrderByDescending(b => b.Recomendation);
                            break;
                    }

                    int pageSize = 3;
                    int pageNumber = (CounterForPage ?? 1);
                    var PageNumberResults = FullDatabaseItem.ToPagedList(pageNumber, pageSize);
                    ViewBag.PageNumberResults = FullDatabaseItem.Count();
                    if (PageNumberResults.Any())
                    {

                        return View(PageNumberResults);
                    }

                    return View("ErrorView");
                }
            }
        }

あなたが見ることができるように私はこのコードを追加しました:

var FullDatabaseItem = from b in db.tblReviews.Include(x => x.tblGame)select b;

レビューテーブルにインクルードがないと、ビューは次のエラーをスローします。

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

ここで問題は次のコード行にあります。

FullDatabaseItem = FullDatabaseItem.Include (x => x.tblGame)
                        .Where (b => b.Score.ToUpper().Contains(DisplaySearchResults.ToUpper()));

ユーザーが私の検索を使用しているときに、ゲームの名前を入力するだけでレコード購入を取得できるように、ゲーム名を取得しようとしています。しかし、ご覧のとおり、検索さ"Score"れているフィールドはtblReviewフィールドです。これは、必要なフィールド"GameName"が存在しないと表示されているため、そこでは機能しないためです。

問題を解決するのに助けが必要です

あなたが必要とするより多くの情報は私に尋ねてください、そして私は提供します

ありがとうございました

4

1 に答える 1

1

エンティティモデルには、tblReviewからtblGameへのナビゲーションプロパティがありますよね?それで、あなたはこのようなものに見える実体を持っていますか?

public class tblReview
{
    public virtual tblGame tblGame { get; set; }
    // other properties
}

この関係は双方向ですか、それとも単方向ですか?つまり、tblGameクラスにはこのようなtblReviewsコレクションプロパティがありますか?

public class tblGame
{
    public virtual ICollection<tblReview> tblReviews { get; set; }
    // other properties
}

その場合、双方向の関連付けがあり、一方のエンティティのフィールドをもう一方のエンティティのフィールドから検索できます。

たとえば、特定の名前のゲームのレビューのリストを表示するとします。あなたはそのようにそれをすることができます:

string gameName = "Pac-Man";
using (var db = new gamezoneDBEntities())
{
    // get reviews for game named pac-man
    var reviews = db.tblReviews.Include(r => r.tblGame)
        .Where(r => r.tblGame.GameName.Equals(gameName, 
            StringComparison.OrdinalIgnoreCase));

    // get game with reviews scored greater than 4
    var games = db.tblGames.Include(g => g.tblReviews)
        .Where(g => g.tblReviews.Any(r => r.Score > 4));
}

したがって、最終的には、これがあなたが求めているものだと思います。

var FullDatabaseItem = db.tblReviews.Include(g => g.tblGame);
if (!string.IsNullOrEmpty(DisplaySearchResults))
{
    FullDatabaseItem = FullDatabaseItem
        .Where(review => review.tblGame.GameName.Contains(DisplaySearchResults));
}

を使用するときに大文字と小文字を区別しない一致を行うために、文字列を大文字に変換する必要はないと思います.Contains()。「pAC-mAN」を検索しても、「Pac-Man」という名前のゲームが返されるはずです。

于 2012-04-14T02:40:03.613 に答える