1

SQL を複製しようとしていますORDER BY。複数のテーブルからデータを取得し、辞書に追加しています。すべてが正常に機能していますが、データを動的に並べ替えられるようにしたいと考えています。つまり、ユーザーはユーザー名、日付などで注文したいと思うかもしれません.

string SortBy       = Request.QueryString["SortBy"];
string SortOrder    = Request.QueryString["SortOrder"];

foreach (KeyValuePair<Main_key, Main_data> entry in mainTable.OrderBy(key=> key.Value.username)
{
    ...
}

この部分を動的にしたい:

key.Value.username

ユーザー入力に応じて。

私はこの回答と、主にこのスニペットを機能させようとしていることを認識していますが、KeyValuePair で構造を使用しているため、機能していません。

4

1 に答える 1

2

これを試して:

public class Main_data
{
    public string username { get; set; }
    public string name { get; set; }
    public string address { get; set; }

    public string GetSortBy(string sortBy)
    {
        switch (sortBy)
        {
            case "username": return username;
            case "name": return name;
            case "address": return address;
            default:
                throw new NotSupportedException(
                    String.Format("Cannot sort on {0}", sortBy));
        }
    }
}

public class DataBinder
{
    public void BindData()
    {
        string sortBy       = Request.QueryString["SortBy"];
        string sortOrder    = Request.QueryString["SortOrder"];

        IEnumerable<KeyValuePair<Main_key, Main_data>> records = null;
        if (sortOrder = "Asc")
        {
            records = mainTable.OrderBy(key=> key.Value.GetSortBy(SortBy);
        }
        else if (sortOrder == "Desc")
        {
            records = mainTable.OrderByDescending(key=> key.Value.GetSortBy(SortBy);
        }
        else
        {
            throw new NotSupportedException("Unknown sortOrder");
        }

        foreach (KeyValuePair<Main_key, Main_data> entry in records)
        {
            // TODO: Do something with the records
        }
    }
}
于 2014-08-13T19:42:39.673 に答える