【问题标题】:Exception in System.Data.Entity.dll but was not handled in user codeSystem.Data.Entity.dll 中的异常但未在用户代码中处理
【发布时间】:2013-06-27 07:56:13
【问题描述】:

我需要使用实体框架计算数据库中的行数。我正在使用 LINQ 方法“计数”。

代码如下:

QvDb dba = new QvDb();
if (dba.KUser.Count(us => us.FacebookId == values["FacebookId"]) == 0)

如您所见,values["FacebookId"] 是一个后数组变量,dba 对象变量是数据库模型构建器。

当我试图访问该页面时,我得到了这个异常:

“System.NotSupportedException”类型的异常发生在 System.Data.Entity.dll 但未在用户代码中处理

附加信息:LINQ to Entities 无法识别该方法 'System.String get_Item(System.String)' 方法,而这个方法不能 被翻译成商店表达式。

为了记录,数组不为空。它是从表单发布的字符串。

【问题讨论】:

    标签: asp.net-mvc linq c#-4.0


    【解决方案1】:

    使用 LINQ to 实体时,LINQ 语句的所有部分都必须得到数据库的支持。

    values["FacebookId"] 是本地字典。所以它不能在远程 SQL 数据库上执行。

    首先将字典中的值提取到局部变量中,然后执行您的 LINQ 语句。

    QvDb dba = new QvDb();
    var id = values["FacebookId"];
    if (dba.KUser.Count(us => us.FacebookId == id) == 0)
    

    【讨论】:

    • 另外,考虑将if (dba.KUser.Count(us => us.FacebookId == id) == 0) 替换为if (!dba.KUser.Any(us => us.FacebookId == id))
    • @SimonBelanger 能解释一下为什么它比 == 0 更好吗?
    • 性能方面,它是一样的。但是从语义上讲,您想检查是否存在“没有任何”元素,并且!AnyCount() == 0 更清楚。这不是“更好”。
    猜你喜欢
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 2016-02-13
    • 2018-10-25
    • 2016-09-21
    相关资源
    最近更新 更多