1

WHERE 句の作成方法は知っていますが、何らかの理由で order by 句を作成できません。

IQueryable<ShowList> query = from s in db.ShowList select s;

if (title != null)
{
    query = query.Where(s => s.Title == title);
}

ここが正しくないところです。ユーザーが並べ替えたい列を選択し、DESC または ASC のどちらを希望するかを選択するオプションをユーザーに提供します。OrderBy () 内で何か間違ったことをしていると思います。

「orderBy」変数はユーザーからの入力であり、「order」変数もユーザーからの入力です。

「orderBy」は列名で、「order」は「desc」または「asc」です。

if (orderBy != null && order != null)
            {
                switch (order)
                {
                    case "asc":
                        query = query.OrderBy(s => orderBy);
                        break;
                    case "desc":
                        query = query.OrderByDescending(s => orderBy);
                        break;
                    default:
                        query = query.OrderBy(s => orderBy);
                        break;
                }
            }

return query.ToList();

誰かが私が間違っていることを教えてもらえますか?

4

2 に答える 2

1

.OrderByと を.OrderByDescending間違って使用しています。これらで使用されるラムダ式は、各アイテムの値を生成する必要があります。代わりに、各アイテムに対して同じ値 ( にあるものは何でもorderBy) を生成しています。次のようなことをする必要があります:

Func<ItemType, object> orderByExpression;
switch (orderBy)
{
    case "Column1":
        orderByExpression = s => s.Column1;
        break;
    case "Column2":
        orderByExpression = s => s.Column2;
        break;
    ...
    default:
        throw new NotSupportedException();
}

switch (order)
{
    case "asc":
        query = query.OrderBy(orderByExpression);
        break;
    case "desc":
        query = query.OrderByDescending(orderByExpression);
        break;
    default:
        throw new NotSupportedException();
}
于 2013-06-10T17:27:36.780 に答える