c# – 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;但是收集[“txtDtinicial”]不能转换为sql,因为没有等效的sql语法,无论如何,数据库无法访问集合.您需要首先将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);

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

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...