用数据库的不同记录搜索可以搜索
问题描述:
我是新来的,在这里已经很久了,我无法解决问题。我有下面的代码在我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"
在那里不起作用,因为它表示它不存在。
我需要帮助解决问题
任何您需要了解更多信息请咨询我,我应提供
谢谢
答
你的实体模型从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”的游戏。
我刚刚收到这个答案会试图暗示它到我的,看看我得到什么结果。将提醒ou的结果,谢谢你的回答 – user1319420 2012-04-14 13:39:37
非常感谢你的工作:)你最好的我一直在这个很长时间,并得到它的工作:) – user1319420 2012-04-14 13:51:37