0
protected void GetFinalResult(IQueryable<clsProfileData> result)
{
    if (ddlHeightFrom.SelectedValue != "0" && ddlHeightTo.SelectedValue != "0")
    {
        int from = Convert.ToInt32(ddlHeightFrom.SelectedValue);      
        result = result.Where(p => Convert.ToInt32(p.Height) > from);
    }
}

我正在使用 Entity Framework 4.0 并且在上述方法p.Height中是错误导致转换(字符串到 int)。有什么办法可以处理吗?

4

3 回答 3

1

一个建议:如果可以的话,将高度作为数字存储在数据库中。EF(目前)没有内置函数可以轻松地将字符串转换为数字。EntityFunctions * 或SqlFunctions也不能帮助您。

存储数字不仅使查询更容易,而且还使您能够编写可搜索的查询。Where正如您现在所拥有的那样,带有转换会禁用列上的任何索引。

如果您无法更改数据库,则可以使用一种解决方法:您可以使用前导零存储数字,以确保它们都具有相同的长度。然后您可以使用字符串比较,因为在排序00002之前出现00010,而在排序时2出现在之后10。这样做,您可以String.Compare在 linq 语句中使用,该语句转换为sql<>在 sql 中。

另请参阅:https ://stackoverflow.com/a/10521557/861716

* Entity Framework 6 中的DbFunctions

于 2012-07-20T07:53:19.607 回答
1

将字符串转换为 Int32 时出错。我在 XML 数据描述中找不到字段是 Int32 的任何地方。最后,存储的过程将该字段作为 int 返回,而不是字符串。奇怪的是,错误消息抱怨它无法将数据投射到另一个方向。

于 2012-10-15T12:27:21.220 回答
0

首先尝试解析有效​​性:

http://msdn.microsoft.com/en-uk/library/f02979c7.aspx

(也可能在您执行此操作时:

Convert.ToInt32(ddlHeightFrom.SelectedValue)

)

例如

int from;
int h;
bool fromres= Int32.TryParse(ddlHeightFrom.SelectedValue, out from);
bool hres= Int32.TryParse(p.Height, out h);
...
于 2012-07-19T08:29:01.943 回答