我收到以下异常[重复]

Posted

技术标签:

【中文标题】我收到以下异常[重复]【英文标题】:I am getting the following exception [duplicate] 【发布时间】:2013-10-21 02:55:07 【问题描述】:

net,我正在.net 中开发应用程序。

我收到以下错误,我不知道我的代码有什么问题

LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.

这是我出现异常的代码。

public List<ToureDeieselBean> loadDeiselListOnTourUpDownId(int tourUpDownId)
    
        return (from p in context.tb_tourDiesel
                where p.deleted == 0
                where p.tourUpDownId == tourUpDownId
                select new ToureDeieselBean
                
                    id = p.id,
                    qty =(float)p.qty,
                    ratePerlt = (float)p.ratePerlt,
                    createdBy = p.createdBy,
                    createdOn = p.createdOn==null?"":(p.createdOn).ToString(),
                    updatedBy = p.updatedBy,
                    updatedOn = p.updatedOn == null ? "" :(p.updatedOn).ToString(),
                    descrption=p.descrption,
                    deleted=Convert.ToBoolean(p.deleted)
                ).ToList<ToureDeieselBean>();
    

【问题讨论】:

createdOnupdatedOn 更改为 DateTime 类型,不要使用 ToString()(这不适用于所有 Linq 提供程序) 您可以毫无问题地使用方法语法。恕我直言,LINQ 无法识别查询 sntax 中的 ToString()。 @ Joachim Isaksson 如果我将 createdOn 和 updatedOn 更改为 DateTime 那么它不接受空值 然后使用DateTime?。顺便说一句:您可能还必须更改deleted 的类型,因为Convert.ToBoolean 很可能会引发下一个异常。 @Slauma yes deleted 之前也抛出异常,但如何解决。 【参考方案1】:

您可以使用null coalescing operator 删除ToString 和更长的三元运算符:

public List<ToureDeieselBean> loadDeiselListOnTourUpDownId(int tourUpDownId)

        return (from p in context.tb_tourDiesel
                where p.deleted == 0
                where p.tourUpDownId == tourUpDownId
                select new ToureDeieselBean
                
                    id = p.id,
                    qty =(float)p.qty,
                    ratePerlt = (float)p.ratePerlt,
                    createdBy = p.createdBy,
                    createdOn = p.createdOn ?? "",
                    updatedBy = p.updatedBy,
                    updatedOn = p.updatedOn ?? "",
                    descrption=p.descrption,
                    deleted=Convert.ToBoolean(p.deleted)
                ).ToList<ToureDeieselBean>();

【讨论】:

【参考方案2】:

当您使用 EF LINQ 查询被转换为 SQL,并且当您在 LINQ 中使用 SQL 中不存在的此类方法时,您会收到此异常。

这将起作用:

var temp=(from p in context.tb_tourDiesel
                where p.deleted == 0
                where p.tourUpDownId == tourUpDownId).ToList<ToureDeieselBean>();

        return (from p in temp 
                select new ToureDeieselBean
                
                    id = p.id,
                    qty = (float)p.qty,
                    ratePerlt = (float)p.ratePerlt,
                    createdBy = p.createdBy,
                    createdOn = p.createdOn == null ? "" : (p.createdOn).ToString(),
                    updatedBy = p.updatedBy,
                    updatedOn = p.updatedOn == null ? "" : (p.updatedOn).ToString(),
                    descrption = p.descrption,
                    deleted = Convert.ToBoolean(p.deleted)
                ).ToList();

【讨论】:

以上是关于我收到以下异常[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 绑定解析异常。目标类不存在[重复]

在JSch中不断收到Auth失败异常,但我能够在没有密码的情况下ssh到IP [重复]

由于缺少权限请求,应用程序崩溃 [重复]

发生异常时如何重复代码? [复制]

将 minifyEnabled 设置为 true 后,我收到以下错误 [重复]

当我运行以下代码时,我收到一个 Servlet 404 错误 [重复]