【发布时间】:2019-09-13 01:57:50
【问题描述】:
我对 MVC5 和 C# 都很陌生。我有一个耗材视图(列表)。我想对 int 字段“Onhand”进行过滤。其中,用户可以在过滤文本框中输入一个数字,我们会带回所有等于或小于手头指定数字的供应。
这是我观点的相关部分:
<form asp-controller="Movies" asp-action="Index">
<p>
Search Supplies: <input type="text" name="SearchString">
<input type="submit" value="Filter" />
</p>
<p>
</p>
</form>
这是我努力让控制器正常工作的地方
var supplies = db.ICS_Supplies
.OrderByDescending(g => g.Supplies_ID)
.ToList();
var catalogs = supplies
.Where(s => s.OnHand.HasValue<(searchString ?? string.Empty));
var pageNumber = page ?? 1;
return View(catalogs.ToPagedList(pageNumber, 10));
具体来说。 .这一行在这里:
var catalogs = supplies
.Where(s => s.OnHand.HasValue<(searchString ?? string.Empty));
我觉得我快到了,但不太了解如何使用<= 和int 的searchstring 值到达那里。 OnHand 是一个 int? 字段。我还需要将searchString 设为int 吗?我的过滤器是否正确?
更新
这是修改后的控制器代码。 .到现在
public ActionResult Reorder(string searchString, int? page)
{
var supplies = db.ICS_Supplies
.OrderByDescending(g => g.Supplies_ID)
.ToList();
var catalogs = supplies
.Where(s =>
s.OnHand.HasValue &&
(searchString == null || s.OnHand.Value <= int.Parse(searchString)));
var pageNumber = page ?? 1;
return View(catalogs.ToPagedList(pageNumber, 10));
}
【问题讨论】:
-
HasValue如果有值则返回true,并且仅适用于可为空的类型(您声明OnHand是int,但它必须是int?) .要将其与string进行比较,您应该将字符串转换为int。所以你最终会得到类似的东西:supplies.Where(s => s.OnHand.HasValue && searchString != null && s.Value <= int.Parse(searchString)) -
或者如果你想在
searchString是null的情况下返回值,那就是s.OnHand.HasValue && (searchString == null || s.Value <= int.Parse(searchString))。虽然如果searchString不是int,int.Parse会抛出异常,所以使用TryParse会更好。 -
@RufusL。谢谢您的回复。我明白你在说什么。我试图实现 var catalogs = supply.Where(s => s.OnHand.HasValue && (searchString == null || s.Value
-
@RufusL - 我解决了 searchString 从 int 到 string 的转换。但仍然存在“没有价值定义”问题
-
您确定执行查询时字符串不是
null吗?这是我能看到它会返回所有记录的唯一情况。
标签: c# linq asp.net-mvc-5