次のSQLステートメントをLINQtoEntitiesクエリとして複製しようとしています(「PRODUCTS」はエンティティにマップされたテーブルです)...注IQueryable ...ソリューションとして投稿されたもののほとんどは、いずれかの検索パラメーターを変換します、または結果をIEnumerableにダンプしてから、そこから変換に進みます。私は数億のレコードを扱っており、2億のレコードをメモリにロードする余裕はなく、それらを再度フィルタリングする必要があります。可能であれば、データベースへの単一のクエリでこれを実行したいと思います。
select *
from PRODUCTS
where
MODEL_CODE = '65' and
CAST(SERIAL_NUMBER as int) > 927000 and
CAST(SERIAL_NUMBER as int) < 928000
私は以下を試しました...
int startSN, endSN;
startSN = 9500
endSN = 9500
if (!int.TryParse(startSerialNumber, out startSN))
throw new InvalidCastException("The start serial number was not a valid value");
if (!int.TryParse(endSerialNumber, out endSN))
throw new InvalidCastException("The end serial number was not a valid value");
IQueryable<PRODUCT> resultList = base.Context.PRODUCTS.Where(b =>
(Convert.ToInt32(b.SERIAL_NUMBER) > startSN) &&
(Convert.ToInt32(b.SERIAL_NUMBER) < endSN)).AsQueryable();
私はこれに似た他のいくつかのバージョンを試してみましたが、運がありませんでした。私は以下の投稿も運が悪かったので見ました。
Entity Framework linqクエリで文字列をintに変換し、解析例外を処理します。ソリューションは、エンティティプロパティを変換する前に、クエリをリストに変換します。
LINQ to Entitiesで文字列をIntに変換しますか?-この問題は、LINQからEntitiesステートメントの外部で簡単に実行できるパラメーターを変換することだけにありました。私はすでにパラメータに対してこれを行っています。
LINQ to Entities StringConvert(double)'を変換してintを文字列に変換することはできません-この問題は実際には私の逆であり、intを文字列に変換しようとしています。1)SqlFunctionsは、intに変換するための関数を提供していません。2)最終的な解決策は、値を変換/キャストする前に、再度IEnumerableに変換することです。
誰か他のアイデアがありますか?私はこれに少し困惑しています!
ありがとう、G