LINQ 多条件查询怎么写?
1.页面用TextBox输入查询信息
<table>
<tr>
<td>设备编号:</td>
<td>@Html.TextBox("deviceCode")
@Html.ValidationMessage("deviceCode")
</td>
</tr>
...
<table>
2.用linq来写查询语句
[HttpPost]
public ActionResult Search(FormCollection collection)
{
var q = from p in db.Devices select p;
if (!string.IsNullOrEmpty(collection["deviceCode"]))
q = q.Where(p => p.deviceCode == int.Parse(collection["deviceCode"]));
...
return View(q.ToList());
}
最后弹出LINQ to Entities 不识别方法“Int32 Parse(System.String)”,因此该方法无法转换为存储表达式。 究竟应该怎么写多条件查询?
------最佳解决方案--------------------var q = (from p in db.Devices.ToList()
------其他解决方案--------------------Linq是延迟加载的,一个Lambda语句结束时,生成的并不是结果集,而是一个SQL指令集,只有当程序请求该结果集的值的时候,才会实际执行该SQL指令查询出结果。
所以如果你的LinqToSQL语句中包含有无法转译为SQL的代码段的时候,就会抛出异常,这类错误通常发生于对筛选条件执行函数操作。
而ToList,AsEnumerable之类的方法都需要把数据实际压入新的数据结构中,执行这类方法会立即执行LinqToSQL语句,然后对生成的中间集进行Linq查询的时候,调用的是LinqToEntity的底层代码,不会再抛出SQL转译的异常。
楼主,40分啊,你懂的。
------其他解决方案--------------------q = q.Where(p => p.deviceCode == Convert.ToInt32(collection["deviceCode"]));
------其他解决方案--------------------那这样:
public ActionResult Search(FormCollection collection)
{
var q = (from p in db.Devices select p).ToList();
if (!string.IsNullOrEmpty(collection["deviceCode"]))
q = q.Where(p => p.deviceCode == int.Parse(collection["deviceCode"])).ToList();
...
return View(q);