3

複数のフィールドでデータを並べ替えているときに問題が発生しています

ここに私が使用したサンプルコードがあります:

 var Item = from itm in DB.Items
select new Item
{
};
return Item.ToList().OrderBy(e => e.ExpiryDate).ToList();

上記のコードはエラーを表示しませんが、有効期限フィールドでソートも行います:(

私がこのように使用する場合

return Item.OrderBy(e => e.ExpiryDate).ToList();

これにより、SQLにorderbyの変換が含まれていないというエラーが発生します

どんな助けでも

前もって感謝します

4

2 に答える 2

6

ここでいくつかのことが起こっていると思います。最初に、結果変数に で作成しているクラスと同じ名前を付けましたselect。おそらく大した違いはありませんが、紛らわしいです。変更しましょう:

var items = from itm in DB.Items
            select new Item
            {
            };

次に、DB.ItemsコンテキストはすでにItemオブジェクトで構築されています。新しいものを作成する必要はありません。上記のコードでは、新しいItemオブジェクトはとにかく空です。

var items = from itm in DB.Items
            select itm;

すぐに注文したい場合は、それもできます。

var items = from itm in DB.Items
            orderby itm.ExpiryDate
            select itm;

としてそれが必要な場合Listは、同じ行でそれを行うことができます:

var items = (from itm in DB.Items
             orderby itm.ExpiryDate
             select itm).ToList();

これで、オブジェクトitemsの具象 ( ) になります。ListItemList<Item>

于 2012-10-23T13:35:01.917 に答える
5

コードはItem、DB から取得したものを何も渡さずに、既定のコンストラクターを使用してインスタンスを作成します。これが、同一の空の項目のリストを取得する理由です。それらを並べ替えても効果はありません。

最初のものを削除しSelectて機能させます。

var Item = DB.Items; // No "Select ..."
return Item.ToList().OrderBy(e => e.ExpiryDate).ToList();

最初に、適用できるToList場所でデータをメモリに強制します。メモリ内にリストを 2 回作成することを避けるためにOrderBy、呼び出しに置き換えることもできます。AsEnumerable()

return Item.AsEnumerable().OrderBy(e => e.ExpiryDate).ToList();
于 2012-10-23T13:32:55.783 に答える