1

私のコードの最初の部分は、IQueryable データの結果を取得します。

var issues = repository.GetAllIssues().Where(i => 
                  i.IssueNotificationRecipients.Any(r => r.Status == "Open"));

次に、ユーザーが要求した並べ替え順序を特定し、追加します。

switch (sort)
{
case 1:
    issues.OrderBy(x => x.Customer);
    break;
case 2:
    issues.OrderBy(x => x.Description);
    break;
case 3:
    issues.OrderBy(x => x.CreatedBy);
    break;
default:
    issues.OrderBy(x => x.DueDateTime);
    break;
}

これはエラーをスローします:

メソッド 'Skip' は、LINQ to Entities の並べ替えられた入力に対してのみサポートされています。メソッド「OrderBy」は、メソッド「Skip」の前に呼び出す必要があります

では、ユーザーの入力に応じて OrderBy を動的に追加するにはどうすればよいでしょうか?

4

2 に答える 2

2

すべてのコードを示したわけではありませんが、問題の 1 つは、変数が参照するクエリ可能オブジェクトを変更issues.OrderBy(..)することを期待していることです。しかし、実際にはそうではありません。元の queryable の順序付きバージョンを表すnewを返します。issuesIOrderedQueryable

issues順序付け操作は、実際には変数と呼ばれるクエリ可能なものに触れていないためです。それを呼び出すと、実際にはソートされていないSkipため、エラーが発生することは理にかなっています。

あなたはおそらくやりたい:

issues = issues.OrderBy(...);
于 2011-02-16T20:38:51.160 に答える
2

ということでしたか

switch (sort)
{
case 1:
    issues = issues.OrderBy(x => x.Customer);
    break;
case 2:
    issues = issues.OrderBy(x => x.Description);
    break;
case 3:
    issues = issues.OrderBy(x => x.CreatedBy);
    break;
default:
    issues = issues.OrderBy(x => x.DueDateTime);
    break;
}

issuesの型を変更するか、新しい変数に設定する必要がある場合があります。IOrderedQueryable<T>

于 2011-02-16T20:39:12.357 に答える