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 回答