2011-01-13 4 views
1

私はWCF oDataサービスを実装しており、LINQPadからoDataサービスを正常に照会できます。私のoDataサービス内では、メモリ常駐コレクションを論理的なビジネスオーダーに分類し、生のhtmlブラウザのクエリを介して、予想された注文データが配線を通じて出荷されることを確認しました。LINQPadのデフォルトの "ID"ソート

しかし、LINQPadは、出荷されるオブジェクトの「ID」キーに基づいて結果に独自のデフォルト順序を課しているようです。

LINQPadでこれが予想される動作ですか?既定のID並べ替えを無効にすることができるセットアッププロパティがありませんでしたか?

編集:ラッセは、私は、クエリが含まれている必要があります示したように、ここではそれが

MyClass.Take (50) 

そしてここでWCFサービスでは、基本的なコレクションコードです...です...

var list = new System.Collections.Generic.List<MyClass>(); 

.. // collection population 

return list.AsQueryable(); 

*更新*

ローカルソートの動作は、ClassName.Dump(nn)LINQPadコマンドに固有です。

ClassNameとClassName.ToList()の両方が、結果をmy oDataサービスから出荷された順序で表示します。 LINQPadをセミテクニカルユーザーテスト母集団に出荷して、金融モデリングアプリケーションで中間計算を照会できるようにする予定だったので、これはまだまだ問題です。 Dump()コマンドは、LINQPadによって提案された最初の既定のクエリです。

+0

LINQPadで実行するコードを表示できますか?また、どのようなコレクションを返すのですか? –

+0

@Lasseあなたがリクエストした追加の詳細で質問を更新しました。 – camelCase

答えて

1

私は、デフォルトの順序は、データベースに物理的に挿入されている順序に基づいていると思います。この場合、私はあなたの本当のアプリが常にデータ(またはこの場合はlinqpadクエリ)に論理的な並べ替えを適用することを保証します。

私はいくつかの外部データが挿入されるまでうまくいったlinqクエリを持っていたので、これは実務経験から知っています。この外部データは線形に挿入されていましたが、実際には長年にわたって日付参照がありました。したがって、私が逐次実行するときにlinqを実行すると、セクションが欠落していました。日付順にソートすると問題が解決しました。 (この数年前、私はデフォルトのソート順序を考えることを学んsincedました):)

ちょうど私tuppence

+0

私のコードに常駐しているメモリにはデータベースが含まれておらず、前述のように、Internet ExplorerでoDataサービスを実行すると、ページソースはhttpワイヤレベルで予期されるデータ順序を確認します。 – camelCase

1

私がオーダーの保存、明示的に指定しない限り、あなたは、SQLのようなことを忘れていると思いますLINQでは(ほとんどの場合、オブジェクトへのLINQ内に)置かれることはめったにありません。

これに対処するためにあなたがTake(またはSQLでtop n)のような操作を実行する必要がある場合、あなたは常には、特にを順序を指定する必要があります。これは毎回結果を保証します。

それ以外の場合は、不定です。

+0

@casperOne:興味深い展望。私のexperinceはLINQ to Objectsであり、今まで私はlinqクエリがメモリ常駐コレクションの物理的順序を反映していることを発見しました。私は高性能コンピューティング分野に注力し、OrderBy()をすべてのクエリに結びつけるのは、DBスキーマを理解できないため、すべてのクエリに「DISTINCT」を貼り付けるSQLプログラマのように、 – camelCase

+0

casperOne - あなたとキャメルケース関係:-) –

+0

@jim - いいえ、私たちはありません。私は接続が表示されません? – casperOne

関連する問題