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

文字列を Int32 に変換するときにエラーが発生しました。フィールドが Int32 である XML datadescriptions のどこにも見つかりませんでした。結局、ストアド プロシージャはそのフィールドを文字列ではなく int として返していました。エラーメッセージが、データを他の方向にキャストできないと不平を言っているのは奇妙です。

于 2012-10-15T12:27:21.220 に答える
1

1 つのアドバイス: 可能であれば、高さを数値としてデータベースに保存してください。EF (現在) には、文字列を数値に簡単に変換する組み込み関数はありません。EntityFunctions * やSqlFunctionsも役に立ちません。

数値を格納すると、クエリがはるかに簡単になるだけでなく、サーガ可能なクエリを記述できるようになります。あなたが今持っているように、変換を使用Whereすると、列のインデックスが無効になります。

データベースを変更できない場合は、回避策を使用できる場合があります。数値を先頭にゼロを付けて保存し、すべて同じ長さになるようにすることができます。次に、文字列比較を使用できます。なぜなら、ソート時に来るのに対し、00002前に来るからです。そうすることで、またはSQLに変換されるlinqステートメントで使用できます。00010210String.Compare<>

参照: https://stackoverflow.com/a/10521557/861716

* Entity Framework 6 のDbFunctions 。

于 2012-07-20T07:53:19.607 に答える
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 に答える