c# – LINQ to Entities不能识别方法’System.String get_Item(System.String)’,

前端之家收集整理的这篇文章主要介绍了c# – LINQ to Entities不能识别方法’System.String get_Item(System.String)’,前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何解决这个问题?

这是我的代码

  1. DateTime dtInicio = new DateTime();
  2. DateTime dtFim = new DateTime();
  3. Int32 codStatus = 0;
  4.  
  5. if(!string.IsNullOrEmpty(collection["txtDtInicial"]))
  6. dtInicio = Convert.ToDateTime(collection["txtDtInicial"]);
  7. if(!string.IsNullOrEmpty(collection["txtDtFinal"]))
  8. dtFim = Convert.ToDateTime(collection["txtDtFinal"]);
  9. if (!string.IsNullOrEmpty(collection["StatusCliente"]))
  10. Convert.ToInt32(collection["StatusCliente"]);
  11.  
  12. var listCLientResult = (from c in db.tbClientes
  13. orderby c.id
  14. where (c.effdt >= dtInicio || string.IsNullOrEmpty(collection["txtDtInicial"]) &&
  15. (c.effdt <= dtFim || string.IsNullOrEmpty(collection["txtDtFinal"])) &&
  16. (c.cod_status_viagem == codStatus || string.IsNullOrEmpty(collection["StatusCliente"])))
  17. select c);
  18. return View(listCLientResult);

我得到的错误是:

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

解决方法

数据库执行的Linq查询在被执行之前被转换为sql;但是收集[“txtDtInicial”]不能转换为sql,因为没有等效的sql语法,无论如何,数据库无法访问集合.您需要首先将collection [“txtDtInicial”]提取到变量中,并且在查询中仅使用此变量.

这是我会做的:

  1. DateTime dtInicio = DateTime.MinValue;
  2. DateTime dtFim = DateTime.MaxValue;
  3. Int32 codStatus = 0;
  4.  
  5. if(!string.IsNullOrEmpty(collection["txtDtInicial"]))
  6. dtInicio = Convert.ToDateTime(collection["txtDtInicial"]);
  7. if(!string.IsNullOrEmpty(collection["txtDtFinal"]))
  8. dtFim = Convert.ToDateTime(collection["txtDtFinal"]);
  9. if (!string.IsNullOrEmpty(collection["StatusCliente"]))
  10. codStatus = Convert.ToInt32(collection["StatusCliente"]);
  11.  
  12. var listCLientResult = (from c in db.tbClientes
  13. orderby c.id
  14. where (c.effdt >= dtInicio) &&
  15. (c.effdt <= dtFim) &&
  16. (c.cod_status_viagem == codStatus)
  17. select c);
  18. return View(listCLientResult);

通过将dtInicio和dtFim初始化为MinValue和MaxValue,您不需要检查它们是否在查询中定义.

猜你在找的C#相关文章