【发布时间】:2018-03-05 13:23:52
【问题描述】:
我有一个 DataTable,它返回如下数据:
APP | VERSION
____|________
app1| 1.0
app1| 2.0
app1| 3.0
app2| 1.0
app3|
如您所见,“app1”有多个版本,有些应用没有任何版本。我需要将此数据表结果存储在某种列表中以供以后在我的代码中使用,所以我想出了字典,但无法让它工作。这是我尝试过的:
public static Dictionary<string, List<string>> AppVer()
{
string SQL = "SELECT column1, column2 FROM myTable a LEFT JOIN
myTable2 v ON v.ID_FK=a.ID_PK";
Dictionary<string, List<string>> versions = new Dictionary<string,
List<string>>();
DataTable dt = new DataTable();
try
{
using (var conn = new OracleConnection(conn_string))
{
conn.Open();
using (OracleCommand cmd = new OracleCommand(SQL, conn))
{
using (OracleDataAdapter dad = new OracleDataAdapter(cmd))
{
dad.Fill(dt);
}
versions = dt.AsEnumerable().ToDictionary<DataRow, string, List<string>>(row => row[0].ToString(), new List<string>(row=> row[1].ToString()));
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return versions;
}
但是,我得到错误
"无法将 lambda 表达式转换为类型 'string',因为它不是 委托类型”。
如何将我的 DataTable 存储到字典中?
编辑:
Dictionary<string, List<Version>> all_versions = AppVer();
StringBuilder sb = new StringBuilder();
foreach (var item in all_versions)
{
sb.AppendFormat("{0} - {1}{2}", item.Key, item.Value, Environment.NewLine);
}
string result = sb.ToString().TrimEnd();
MessageBox.Show(result);
【问题讨论】:
-
顺便说一句,你知道有一个
Version-class 可以使用吗?所以我更喜欢Dictionary<string, List<Version>> -
您可能想查看
.ToLookup,它与 ToDictionary 非常相似,但用于相同键的重复值时。 msdn.microsoft.com/en-us/library/… -
@Chris,谢谢,你有什么例子吗,我找不到合适的?
-
@TimSchmelter,从来没有这样做过,我不太清楚为什么要为相同的数据运行两次数据库连接。如果这就是您所说的“版本”类的意思。
标签: c# dictionary datatable