我正在将其用于查询字符串以过滤我在数据库中的电影';It’不对劲
本文关键字:电影 It 数据库 用于 查询 过滤 字符串 | 更新日期: 2023-09-27 17:59:16
string mid=Request.QueryString["ID"];
if ( db.Movies.Where(i=>i.ID==mid))
{
repMovie.DataSource = db.Movies.Find().ToString();
repMovie.DataBind();
}
尝试添加.Any()
以在if语句中返回布尔值。
如果可枚举对象返回任何结果,则Any()
返回true。
if ( db.Movies.Where(i=>i.ID==mid).Any())
{
//...
}
首先,db.Movies.Where(i=>i.ID==mid)
不是布尔值。你为什么要测试它是真是假?
第二,repMovie.DataSource = db.Movies.Find().ToString();
是没有条件的,它怎么会返回正确的东西呢?你为什么不这样做:
(假设最多有一场比赛):
var matchingMovie = db.Movies.FirstOrDefault(i => i.ID == movieId);
if (matchingMovie !== null) {
// you found it in one operation and can work with it now
}
我建议不要使用mid
这样的变量名。那是什么?其他人,甚至是你自己,在几个月后看到它,都会不知道,必须做额外的扫描工作来弄清楚它的意义。请改用movieId
。
既然如此,为什么你自己直接从查询字符串中获取movieId?你的MVC操作方法应该为你做这件事:
public ActionResult Index(int ID) {
// Lookie! you've automatically gotten the ID from the querystring, and
// you also know it's a non-null integer. If it were null or a non-integer,
// it wouldn't match this route and the client would get a 404, unless you
// had another route to handle those.
}
替代方式
int numMid = Convert.ToInt32(mid);
if ( db.Movies.Where(i=>i.ID==numMid).Count()>0)
{
//...
}
或
int numMid = Convert.ToInt32(mid);
if (db.Movies.Any(i=>i.ID==numMid))
{
//...
}