【发布时间】:2021-02-12 20:19:49
【问题描述】:
大家好! Tl;博士我有一个Dictionary<string, List<object>> 叫
具有以下键的“表”:
"id" being int,
"date" being Datetime,
"name", "entry1", "entry2", "entry3" being strings.
以及List<object> 列表中键的所有值。我想通过name 字段订购字典,名称类似于“John Doe”。我尝试使用 .OrderBy() ,它要么抛出异常,要么只订购那个键而不是整个字典。例如:var result = table.Orderby(pairs => pairs.Value[2]); 会抛出异常,因为对象不是字符串。
如何才能做到这一点?谢谢!
编辑: 该表用于使用 Excel 文件中的值:
foreach (var key in table.Keys)
{
for (int i = 0; i < max; i++)
{
switch (key)
{
case "id":
worksheet.Cells[i + 1, j].Value = ConversionWrapper<int>((int)table[key][i]);
break;
case "date":
worksheet.Cells[i + 1, j].Value = ConversionWrapper<string>((DateTime)table[key][i]);
break;
case "name":
case "entry1":
case "entry2":
case "entry3":
case "entry4":
worksheet.Cells[i + 1, j].Value = ConversionWrapper<string>((string)table[key][i]);
break;
default:
break;
}
}
++j;
}
private static T ConversionWrapper<T>(object elem)
{
switch (elem)
{
case int:
case string:
return (T)elem;
case DateTime:
return (T)(object)((DateTime)elem).ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
default:
throw new ArgumentException();
}
}
Method to extract the values:
private static Dictionary<string, List<object>> GetAllElementsLM(SqlConnection conn)
{
string query;
string[] columns = { "id", "date", "name", "entry1", "entry2", "entry3", "entry4" };
var dic = new Dictionary<string, List<object>>();
conn.Open();
foreach (var elem in columns)
{
dic.Add(elem, new List<object>());
query = $@"SELECT {elem} FROM ""feedback""";
using (var command = new SqlCommand(query, conn))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
dic[elem].Add(reader.GetValue(0));
}
}
}
}
conn.Close();
return dic;
}
【问题讨论】:
-
"我有一个名为 "table" 的
Dictionary<string, List<object>>带有以下键" 考虑到int和DateTime不是从string派生的,这是不可能的。 -
@JohnathanBarclay 键是字符串,我指的是我将对象值转换为
-
您不需要对字典进行排序。如果你这样做了,那么 Dictionary 不是要使用的正确数据结构。字典专为键/值查找而设计
-
您想要一本有序的字典吗?或者您是否尝试将字典投影到 new 有序数据结构中?
-
@mjwills 我不“想要”字典。这些值是从 SQL 表中提取的,我发现字典似乎很合适。我希望所有 7 个条目(id、日期、名称等)都被“链接”,无论我需要使用什么数据类型。
标签: c# list linq sorting dictionary