1

我正在尝试在这里对我的课程进行排序。我的代码如下

public class Row
{
    private Dictionary<string, object> _data = new Dictionary<string, object>();
    public object this[string index]
    {
        get { return _data[index]; }
        set { _data[index] = value; }
    }
}

我已将其添加到 Observable 集合中,例如

ObservableCollection<Row> RowList = new ObservableCollection<Row>();

在我的最终输出中,我得到

RowList[0]._data[0].Key = "Column 1"
                   .Value = "23"
          ._data[1].Key = "Column 2"
                   .Value = "Not Important"
          ._data[1].Key = "Column 3"
                   .Value = "Not Important"

RowList[1]._data[0].Key = "Column 1"
                       .Value = "11"
          ._data[1].Key = "Column 2"
                       .Value = "Not Important"
          ._data[1].Key = "Column 3"
                       .Value="Not Important"

RowList[2]._data[0].Key = "Column 1"
                   .Value = "8"
          ._data[1].Key = "Column 2"
                   .Value = "Not Important"
          ._data[1].Key = "Column 3"
                   .Value = "Not Important"

现在我想对Column 1值进行排序。我可以使用我尝试使用的 Linq

foreach (RowList _r in RowList.OrderBy(p => p.Column1))// I am not sure if this approach is right
{

}
4

3 回答 3

0

看起来你在找.OrderBy(r => r[0].Key)

于 2013-11-01T09:15:53.890 回答
0

您和其他回答者非常接近解决方案。实际上是:

RowList.OrderBy(p => p["Column1"])

该类Row有一个 indexer 属性,它接受一个字符串(不是 int)。

您还应该考虑@usr 关于值类型的提示。在您的示例中,所有值都是字符串。这意味着它们被排序为字符串:11, 23, 8

要以数字方式对它们进行排序,您可以更改值的类型:

row[0]["Column1"] = 23; // <-- value is int
row[1]["Column1"] = 11;
row[2]["Column1"] = 8;

或按以下顺序转换它们:

RowList.OrderBy(p => int.Parse(p["Column1"]));

现在的顺序是:8, 11, 23

于 2013-11-01T10:31:55.967 回答
0

您可以按任何表达式排序。它不必是简单的属性访问(您似乎直观地假设):

RowList.OrderBy(p => (AppropriateDataTypeHere)p.Keys["Column1"])

强制转换是必要的,因为您无法比较两个object变量。您可以编写一个IComparer<object>可以做到这一点并实现您的比较规则的自定义。

于 2013-11-01T09:15:09.057 回答