5

私はMVCが初めてです。

HTML ページにデータの並べ替えを実装したいと考えています。このコードで生成されたモデルがあります:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{
    var results = from g in this.context.PercConfigEntry
                  where g.Key == "ConfigEntries"
                  select g;
    return results;
}

そしてビュー:

@model IEnumerable<PercConfigEntry>
@foreach ( var config in Model )
{
   ...
}

これは機能します。しかし、次のようにクエリに「orderby」を追加すると:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{
    var results = from g in this.context.PercConfigEntry
                  where g.Key == "ConfigEntries"
                  orderby g.ConfigName
                  select g;
    return results;
}

foreach で DataServiceQueryException をスローします。

どうしたの?

前もって感謝します。

4

1 に答える 1

2

この問題は、クエリ プロバイダーに関係しています。おそらく、単に順序付けをサポートしていないだけです。これ以上の情報がなければ、これをお勧めします:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{
    var results = 
        (from g in this.context.PercConfigEntry
         where g.Key == "ConfigEntries"
         select g)
        .AsEnumerable()
        .OrderBy(g => g.ConfigName);
    return results;
}

または流暢な構文で:

public IEnumerable<PercConfigEntry> GetPercConfigEntries() 
{
    var results = this.context.PercConfigEntry
        .Where(g => g.Key == "ConfigEntries")
        .AsEnumerable()
        .OrderBy(g => g.ConfigName);
    return results;
}

これにより、プロバイダーで順序付けなしでクエリが強制的に実行され、クライアントで再順序付けされます。つまり、 への呼び出しAsEnumerableによって結果セットがクエリ プロバイダーから効果的に切断され、OrderBy(または後続のメソッド) が評価されます。クライアントで。これは、プロバイダーに注文を許可するほど効率的ではない可能性がありますが、プロバイダーが注文をサポートしていない場合は、これが唯一の方法です。

于 2013-08-03T17:24:53.807 に答える