3

为什么 EF 不能Int32.Parsewhere条件部分翻译?

例如下面的代码有错误:

var query = (from list in dbContext.Packages
                             where list.Id == Int32.Parse(Request["Id"].ToString())
                             select list).FirstOrDefault();

我解决了这个问题:

Int32 ID = Int32.Parse(Request["Id"].ToString());
 var query = (from list in dbContext.Packages
                             where list.Id == ID
                             select list).FirstOrDefault();
4

2 回答 2

2

因为查询只是一个被翻译成 SQL 的表达式。

EF 不知道如何翻译Int32.Parse成等效的 SQL 语句,所以它失败了。

于 2012-09-04T14:56:38.217 回答
1

你解决问题的方法是正确的。

where list.Id == Int32.Parse(Request["Id"].ToString()),如果它可以工作,意味着发送Request到数据库,让数据库提取["Id"],然后调用ToString()and Int32.Parse()

Int32 ID = Int32.Parse(Request["Id"].ToString());在客户端上执行。然后你得到一个整数值,并且只有那个整数值被发送到数据库。

于 2012-09-04T14:58:11.193 回答