0

私のアプリは、DbContext を使用した EF 5.0 Code First です。Linq を使用して操作 (フィルターと並べ替え) を試みています。私は最初に次のようにローカルにコンテキストをロードしようとしています:

context.mytable.orderby(function a a.somestring).thenby(function b d.someint).load

エラーは発生しませんが、文字列の順序は無視されます。int ソートが機能します。同様に、バインディング ソースを設定しようとすると、文字列または日付を比較する linq 部分が機能しませんが、整数を使用すると機能します。これらは SQL クエリに正しく変換されていないと思いますが、修正方法がわかりません。正しい方向へのポイントをいただければ幸いです。

4

1 に答える 1

0

ただし、 Load() は何も作成しません。一連のアイテムを取得して、基礎となるソースからコンテキストにロードするだけです。mytable は実際のデータを保持していないため、context.mytable に順序付けを課すことはできません。実際のデータを取得するために使用するクエリの一部を保持しています。

UI に順序付けを行うには、バインド先のリストを順序付けするか、順序付けされていないリストを使用して、順序付けを適用するジョブを持つオブジェクトにラップする必要があります。Local を使用しているので、後者を使用してCollectionViewSourceを使用します。

WPF の CollectionViewSource の例を次に示します。順番に表示したい順序付けられていないリストである DataContext のプロパティ StateOrProvinces にバインドされています。

<UserControl.Resources>
    <CollectionViewSource x:Key="stateOrProvinceViewSource" Source="{Binding Path=StateOrProvinces}" >
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="Name" />
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>
</UserControl.Resources>

scm は次のとおりです。

xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"

コードで同じこと:

 CollectionViewSource orderedView = new CollectionViewSource()
     {
         Source = StateOrProvinces,
     };
 orderedView.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

追加のレイヤーを使用して順序付けを適用すると、いくつかの利点があります。異なる場所で異なる順序で同じリストを表示し、毎回手動で順序を適用することなく、基になるリストからアイテムを追加/削除できます。

また、追加のベルとホイッスルを持つCollectionViewクラスも確認する必要がありますが、情報の過負荷を削減するために、ここでは説明しません。

于 2013-02-28T20:49:02.510 に答える