如何在ASP.NET MVC中的2个表中进行过滤?

时间:2019-03-30 06:59:48

标签: c# asp.net-mvc

我想通过其他表中的Contract_Num在表中进行搜索,但是它们之间存在关联。

<b>Search By:</b>
@Html.TextBox("contracts.Contract_Num") <text>Contract Number</text>
<input type="submit" value="Search" />


                @foreach (var item in Model)
                {

                    <tbody>
                        <tr>

                            <td>
                                @Html.DisplayFor(modelItem => item.contracts.Contract_Num)
                            </td>

                            <td>
                                @Html.DisplayFor(modelItem => item.Monthe)
                            </td>
                            <td>
                                @Html.DisplayFor(modelItem => item.contracts.AmountOfRent)
                            </td>

                            <td>
                                @Html.DisplayFor(modelItem => item.Receipt)
                            </td>

                            <td>
                                @{
                    var Balance = item.contracts.AmountOfRent - item.Receipt;
                                }

                                @Balance
                            </td>

                            <td>
                                @Html.DisplayFor(modelItem => item.Not)
                            </td>

                            <td>
                                @Html.ActionLink("تعديل", "Edit", new { id = item.ContractMonth_Id }) |
                                @Html.ActionLink("التفاصيل", "Details", new { id = item.ContractMonth_Id }) |
                                @Html.ActionLink("حذف", "Delete", new { id = item.ContractMonth_Id })
                            </td>

                    </tbody>
                }

            </table>

        </div>
    </div>

    </div>

}

这是控制器:

//GET: ContractMonth
public ActionResult Index(string Contract_Num)
{
    return View(_context.ContractMonth
                        .Where(x => x.contracts.Contract_Num).ToString());
}

但是我得到一个错误:

  

不能将'int'隐式转换为'bool'

我该怎么做?

4 个答案:

答案 0 :(得分:0)

您忘记了包含过滤器值,而是使用Single而不是Where:

var cm = _context.ContractMonth.Single(x => x.contracts.Contract_Num == Contract_Num);
var cn = cm.Contract_Num;

return View(cm.ToString());

答案 1 :(得分:0)

您忘记了包括filter和int到字符串转换。使用下面的代码对您有帮助

var contractMonth = _context.ContractMonth.FirstOrDefault(x => x.contracts.Contract_Num.ToString()== Contract_Num);

var contactNumber = cm.Contract_Num;

返回视图(contactNumber.ToString());

答案 2 :(得分:0)

您需要将两个变量都转换为一种数据类型,以便进行比较。

List<ContractMonth> contractMonth = new List<ContractMonth>();
contractMonth =_context.ContractMonth.Where(x =>( x.contracts.Contract_Num==null?"":contracts.Contract_Num.ToString()) == Contract_Num.ToString()).ToList();
     return View(contractMonth);

答案 3 :(得分:0)

我确定问题出在这一行:

return View(_context.ContractMonth.Where(x => x.contracts.Contract_Num).ToString())

这是我发现的几个问题:

1)LINQ Where()扩展方法需要针对操作方法的参数使用带有等于运算符的布尔表达式,而不仅仅是直接使用Contract_Num

2)LINQ to Entities中ToString()末尾的Where()将返回IQueryable实例的完全限定名称,而不是所选的Contract_Num。使用ToList()返回List集合。

因此,从控制器和视图的角度出发,并假设Contract_Numint,则应从操作方法返回一个列表,如下例所示:

public ActionResult Index(int? Contract_Num)
{
    if (Contract_Num != null)
    {
        var list = _context.ContractMonth.Where(x => x.contracts.Contract_Num == Contract_Num.Value).ToList();
        return View(list);
    }
    else
    {
        // return new empty list 
    }
}

如果您在ContractsContractMonth之间具有外键关系,建议您使用join语法或Join扩展方法:

public ActionResult Index(int? Contract_Num)
{
    if (Contract_Num != null)
    {
        var list = (from cm in _context.ContractMonth
                    join ct in _context.Contracts
                    on cm.Contract_Num equals ct.Contract_Num
                    where cm.Contract_Num == Contract_Num.Value
                    select cm).ToList();
        return View(list);
    }
    else
    {
        // return new empty list 
    }
}

此外,为防止空值和空列表进入foreach循环,您应在迭代列表之前放置if条件:

@if (Model != null && Model.Count > 0)
{
    @foreach (var item in Model)
    {
        // DisplayFor and other stuff
    }
}

注意:,您需要避免在LINQ to Entities查询中进行不必要的类型转换,因为某些转换方法,例如ToString()不能转换为SQL语句。