int に変換された文字列でリストを並べ替えたいと思います。
var orderedListOfRfidTags = uow.RfidTags.OrderBy(t => Convert.ToInt32(t.Number)).ToList();
ただし、取得: メソッド「ToInt32」はサポートされていません。
int に変換された文字列でリストを並べ替えたいと思います。
var orderedListOfRfidTags = uow.RfidTags.OrderBy(t => Convert.ToInt32(t.Number)).ToList();
ただし、取得: メソッド「ToInt32」はサポートされていません。
どうですか:
var orderedListOfRfidTags = uow.RfidTags.OrderBy(t => t.Number).ToList();
CLR メソッドを削除して、ORM が既知の SQL クエリに変換できるようにします。
編集:最初に変換したいので、読んだだけです:
var orderedListOfRfidTags = uow.RfidTags.ToList().OrderBy(t => Convert.ToInt32(t.Number));
前に述べたように、DB からすべてを取得してからクライアント (linq to object) で注文するか、ORM でメソッドを見つけて int にキャストします。注文する前に Number が変換された新しいリストを選択し、それで注文します。
編集2:
このORMで動作するダイレクトキャストはどうですか?
var orderedListOfRfidTags = uow.RfidTags.OrderBy(t => (int)t.Number).ToList();
私はLightSpeedの開発者の1人です。
LightSpeed 3.11 RTMのLINQプロバイダーは、Convert.ToInt32をサポートしていません。ただし、今すぐダウンロードできるナイトリーリリースを介してサポートを追加しました。
夜間リリースを使用したくない場合は、Query Objects APIにドロップダウンし、SQL CAST関数を直接呼び出すことで、目的の結果を得ることができます。これは次のようになります。
Query query = new Query
{
Order = Order.By(Entity.Attribute("Number")
.Function("CAST", new LiteralExpression("INTEGER") { EmitInline = true }))
};
uow.Find<RfidTag>(query);
キャストタイプのかなり冗長なLiteralExpressionの理由は、デフォルトでLightSpeedがパラメーターを介してデータベースに値を送信するためです(SQLインジェクション攻撃を回避するため)。ただし、CAST関数の場合、SQLエンジンは、p0の値が「INTEGER」である場所ではCAST(Number, INTEGER)
なく、確認する必要があります。CAST(Number, @p0)
したがって、より自然な文字列リテラルではなく、パラメータ化をバイパスするEmitInline式を使用する必要があります。
ただし、繰り返しになりますが、ナイトリーリリースはLINQのConvert.ToInt32をサポートしているため、ナイトリービルドを避けたい場合にのみ、このレベルにドロップダウンする必要があります。
var orderedListOfRfidTags = (uow.RfidTags.ToList()).OrderBy(t => int.Parse(t.Number));
したがって、この問題に対する私の解決策は次のとおりです。
var query = (from q in query select q).ToList().Where(x => Convert.ToInt32(x.col_string) > 0);
最初に IQueryable をリストにキャストし、次にデータ型 string の列を int32 に変換して、数学演算で使用できるようにしました。
これが役立つことを願っています。
「RfidTags」がどのようなタイプであるかはわかりませんし、Lightspeed ORM にも精通していませんが、Linq to Sql で同様の問題が発生したときに、特定のメソッドを呼び出そうとしていることを知っています。 Where または OrderBy 句がサポートされていない場合は、単純な古い Linq を扱うように変更します。
たとえば、これを試してみませんか?
var listOfRfidTags = uow.RfidTags.ToList();
var orderedListOfRfidTags = listOfRfidTags.OrderBy(t => Convert.ToInt32(t.Number));
(はい、これを 1 行に結合することは可能ですが、ここではわかりやすくするために 2 行で示しています。)
幸運を!
int.Parse
Convert の代わりに使用してみてください。Lightspeed は、一方をサポートせずに他方をサポートしている可能性があります。
var orderedListOfRfidTags = uow.RfidTags
.OrderBy(t => int.Parse(t.Number))
.ToList();