我想通过其他表中的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'
我该怎么做?
答案 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_Num
是int
,则应从操作方法返回一个列表,如下例所示:
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
}
}
如果您在Contracts
和ContractMonth
之间具有外键关系,建议您使用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语句。