1

簡単に言うと、範囲 (高値/低値) に基づいてアイテムを取得する必要がありますが、データベースの列/プロパティは であり、stringそれを変更することはできません。では、範囲を比較するにはどうすればよいでしょうか。

int比較できるように、エンティティ プロパティを に変換する方法が見つからないようです。もちろんうまくいきConvert.toInt32ません。役立つものは何もありませんSqlFunctionsが、簡単なものを見落としている可能性があります。

私はそれで遊んでいますが、今のところ運がありません。これはうまくいかない私の最新の試みです:

var result = Repo.Query().Where(e => e.SerialNumber.Cast<int>().First() >= myIntLowVariable && e.SerialNumber.Cast<int>().First() <= myIntHighVariable);

助言がありますか?

アップデート

ユーザーは 2 つの SerialNumber を入力し、その範囲内のすべてのレコードを返す必要がありますが、これSerialNumberstring/varchar列/プロパティです。

データ- ここに表を入れる方法がわかりません..

SN :: 説明
1 :: 牛乳
2 :: 卵
3 :: パン
4 :: チーズ
5 :: ベーコン
6 :: ヨーグルト
7 :: マスタード
8 :: チキン
9 :: ピザ
10 :: チップス

4

2 に答える 2

2

クエリで ToList() を呼び出すと、文字列を Int32 にキャストできるはずです。

var result = Repo.Query().ToList().Where(e => e.StringNumberField.Cast<int>().First() >= myIntLowVariable && e.StringNumberField.Cast<int>().First() <= myIntHighVariable);

クエリ全体を投影できない場合は、次のことができます。

フィルタリングを行うデータベースにストアド プロシージャを作成します。このようなことができます:

CREATE PROCEDURE spGetStuffBetween
(
    @min int,
    @max int
)
AS
BEGIN
    SELECT * from dbo.Stuff where Convert(int, SerialNumber) < @max and  Convert(int, SerialNumber) > @min;
END

EDM ツールを使用して、新しく追加されたストアド プロシージャでデータベースからモデルを更新します。[追加] で、作成したストアド プロシージャを選択し、[完了] を選択します。

モデルを更新すると、ストアド プロシージャが表示されなくなるため、デザイン サーフェイスを右クリックして [モデル ブラウザー] を選択します。Stored Procedures ノードの下に表示されます。

モデル ブラウザーでストアド プロシージャをダブルクリックします。ここで、ストアド プロシージャから返すコレクションのタイプを指定できます。

これで、次のコードを呼び出して、必要な結果を取得できます。

int myIntLowVariable = 1000;
int myIntHighVariable = 1000000;

var results= Repo.spGetAnimalsBetweenRange(myIntLowVariable , myIntHighVariable );
于 2012-05-18T00:11:01.943 に答える
1

ここでの答えを使用して文字列を先行ゼロに右揃えし、入力文字列でも同じことを行います。これで、目的の範囲をアルファベットで比較できます。

この質問のアプローチを試すこともできます。

于 2012-05-18T02:46:50.820 に答える