C# DbComparisonExpression需要具有可比较类型的参数
我不熟悉使用Linq,正在尝试创建一个搜索,它将按图表编号进行搜索,并在新的操作视图中显示结果。运行代码时,我得到错误“DbComparisonExpression需要具有可比较类型的参数”。我相信这与搜索类型为string和图表编号为int有关,但我不确定如何解决这个问题。任何帮助都将不胜感激 控制器: 型号: 查看:C# DbComparisonExpression需要具有可比较类型的参数,c#,linq-to-sql,C#,Linq To Sql,我不熟悉使用Linq,正在尝试创建一个搜索,它将按图表编号进行搜索,并在新的操作视图中显示结果。运行代码时,我得到错误“DbComparisonExpression需要具有可比较类型的参数”。我相信这与搜索类型为string和图表编号为int有关,但我不确定如何解决这个问题。任何帮助都将不胜感激 控制器: 型号: 查看: 将数字输入转换为int: int chartNo = 0; if (searchTerm == null || Int32.TryParse(searchTerm, out c
将数字输入转换为
int
:
int chartNo = 0;
if (searchTerm == null || Int32.TryParse(searchTerm, out chartNo)) {
var model = db.Patient
.Where(r => searchTerm == null || r.ChartNumber == chartNo)
.Select(...);
return ...;
} else {
// Invalid number entered
}
或者使用C#7.0输出变量功能:
if (searchTerm == null || Int32.TryParse(searchTerm, out int chartNo)) {
var model = db.Patient
.Where(r => searchTerm == null || r.ChartNumber == chartNo)
.Select(...);
return ...;
} else {
// Invalid number entered
}
ChartNumber
是字符串还是整数?进行一些适当的转换
或使用适当的比较,例如在比较类似对象时使用object.Equals,或者在左侧进行比较时尝试更改r.ChartNumber=Convert.ToInt32(searchTerm),或者将查询更改为使用=
,EF似乎没有考虑到您的类型转换运算符。添加到此逻辑中,我现在得到“使用未分配的局部变量”图表否。只需使用0
初始化即可解决此问题。请参阅我编辑的示例。
@model IEnumerable<Project.Models.NewListModel>
@{
ViewBag.Title = "Home Page";
}
<form method="get">
<input type="search" name="searchTerm" />
<input type="submit" value="Search by Chart Number" />
</form>
@foreach (var item in Model)
{
<div>
<h4>@item.ChartNumber</h4>
</div>
<div>@item.FirstName</div>
<div>@item.LastName</div>
}
public ActionResult Index(string searchTerm = null)
{
int chartNo;
if (searchTerm == null || Int32.TryParse(searchTerm, out chartNo)) {
var model = db.Patient
.Where(r => searchTerm == null || r.ChartNumber == chartNo)
.Select(r => new NewListModel
{
ChartNumber = r.ChartNumber,
FirstName = r.FirstName,
LastName = r.LastName,
}
);
return View(model);
} else {
//Invalid number entered
}
}
int chartNo = 0;
if (searchTerm == null || Int32.TryParse(searchTerm, out chartNo)) {
var model = db.Patient
.Where(r => searchTerm == null || r.ChartNumber == chartNo)
.Select(...);
return ...;
} else {
// Invalid number entered
}
if (searchTerm == null || Int32.TryParse(searchTerm, out int chartNo)) {
var model = db.Patient
.Where(r => searchTerm == null || r.ChartNumber == chartNo)
.Select(...);
return ...;
} else {
// Invalid number entered
}