LINQ to Entities无法识别方法’System.String get_Item(System.String)’,

我怎么解决这个问题?

这是我的代码:

DateTime dtInicio = new DateTime(); DateTime dtFim = new DateTime(); Int32 codStatus = 0; if(!string.IsNullOrEmpty(collection["txtDtInicial"])) dtInicio = Convert.ToDateTime(collection["txtDtInicial"]); if(!string.IsNullOrEmpty(collection["txtDtFinal"])) dtFim = Convert.ToDateTime(collection["txtDtFinal"]); if (!string.IsNullOrEmpty(collection["StatusCliente"])) Convert.ToInt32(collection["StatusCliente"]); var listCLientResult = (from c in db.tbClientes orderby c.id where (c.effdt >= dtInicio || string.IsNullOrEmpty(collection["txtDtInicial"]) && (c.effdt <= dtFim || string.IsNullOrEmpty(collection["txtDtFinal"])) && (c.cod_status_viagem == codStatus || string.IsNullOrEmpty(collection["StatusCliente"]))) select c); return View(listCLientResult); 

我得到的错误是:

LINQ to Entities无法识别方法’System.String get_Item(System.String)’,该方法无法转换为存储库的表达式。

对数据库执行的Linq查询在执行之前会被转换为SQL; 但是collection["txtDtInicial"]无法转换为SQL,因为没有等效的SQL语法,无论如何数据库都无权访问collection 。 您需要首先将collection["txtDtInicial"]提取到变量,并在查询中仅使用此变量。

这就是我要做的事情:

 DateTime dtInicio = DateTime.MinValue; DateTime dtFim = DateTime.MaxValue; Int32 codStatus = 0; if(!string.IsNullOrEmpty(collection["txtDtInicial"])) dtInicio = Convert.ToDateTime(collection["txtDtInicial"]); if(!string.IsNullOrEmpty(collection["txtDtFinal"])) dtFim = Convert.ToDateTime(collection["txtDtFinal"]); if (!string.IsNullOrEmpty(collection["StatusCliente"])) codStatus = Convert.ToInt32(collection["StatusCliente"]); var listCLientResult = (from c in db.tbClientes orderby c.id where (c.effdt >= dtInicio) && (c.effdt <= dtFim) && (c.cod_status_viagem == codStatus) select c); return View(listCLientResult); 

通过将dtIniciodtFim初始化为MinValue和MaxValue,您无需检查它们是否在查询中定义。

Linq查询最终转换为SQL查询,LINQ不知道如何处理Session [“UserName”](获取“UserName”项)。

解决此问题的常用方法是使用您将分配Session [“UserName”]的局部变量以及您将在Linq查询中使用的局部变量…

喜欢

string loggedUserName = Session [“LogedUsername”]。ToString();
var userdetail = dc.faculties.Where(a => a.F_UserName.Equals(loggedUserName))。FirstOrDefault();

参考http://mvc4asp.blogspot.in/

一行……

不要在Linq(实体)查询中使用字符串转换函数!

错误:

 user = db.Users.Where(u => u.Name == dt.Rows[i]["Name"].ToString()).FirstOrDefault(); 

正确:

 string Name = dt.Rows[i]["Name"].ToString(); user = db.Users.Where(u => u.Name == Name).FirstOrDefault();