C# DbComparisonExpression需要具有可比较类型的参数

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

我不熟悉使用Linq,正在尝试创建一个搜索,它将按图表编号进行搜索,并在新的操作视图中显示结果。运行代码时,我得到错误“DbComparisonExpression需要具有可比较类型的参数”。我相信这与搜索类型为string和图表编号为int有关,但我不确定如何解决这个问题。任何帮助都将不胜感激

控制器:

型号:

查看:


将数字输入转换为
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
}