c# - system.linq.enumaerable+
我有一个 SQL 查询,它从 SQL Express DB 读取字符串数据(切换到 Azure)。检索到数据后,我将其读入数组,然后在组合框中显示数组的内容。我没有收到任何错误,但是,在组合框中,显示了一个额外的字段,我无法弄清楚如何防止这种情况。
我有一个用 {get; 创建的数组的类 放;}。下面是主程序的实际代码:
问题描述
我有一个 SQL 查询,它从 SQL Express DB 读取字符串数据(切换到 Azure)。检索到数据后,我将其读入数组,然后在组合框中显示数组的内容。我没有收到任何错误,但是,在组合框中,显示了一个额外的字段,我无法弄清楚如何防止这种情况。
我有一个用 {get; 创建的数组的类 放;}。下面是主程序的实际代码:
LocationList[] address1 = null;
string sql = @"SELECT Address1 FROM DN";
using (var cmd = new SqlCommand(sql, connectionString))
{
connectionString.Open();
using (var sqlReader = cmd.ExecuteReader())
{
var list = new List<LocationList>();
while (sqlReader.Read())
{
list.Add(new LocationList { Address1 = sqlReader.GetString(0) });
}
address1 = list.Distinct().ToArray();
sqlReader.Close();
}
connectionString.Close();
}
cbTransferTo.Items.Add(address1.Cast<string>());
此外,每次单击下拉菜单时,都会添加一个额外的项目,而无需启动和停止程序。它不应该这样做,我找不到问题。
程序需要做的只是显示它从 SQL 数据库表中获取的内容,该表是一个位置列表。
非常感谢您的帮助。
调用address1.Cast<string>()
返回一个IEnumerable
实现类型,而不是一个字符串。您正在将此类型添加到您的组合框中,并通过调用ToString
返回类型名称来呈现它。
因为它你的代码是错误的。address1
是 的序列LocationList
,而不是string
。因为调用Cast
是惰性评估的,所以您没有看到错误。
解决方案
您正在向组合框中添加单个项目,但该单个项目是来自 的返回值Cast<string>()
,它是一个序列。该类型不会覆盖ToString()
,因此您将获得该类型的名称。
我相信您想要做的是将所有项目添加到组合框中:
foreach (var location in address1)
{
cbTransferTo.Add(location.Address1);
}
请注意,如果您只是遍历 的结果Cast<string>()
,无论如何我都希望出现异常 - 因为address1
是一系列LocationList
项目,而不是字符串。不过,尚不清楚您为什么要使用LocationList
它-我怀疑仅使用字符串开头会更简单。更简单的代码是:
string sql = @"SELECT Address1 FROM DN";
List<string> addresses = new List<string>();
using (var cmd = new SqlCommand(sql, connectionString))
{
connectionString.Open();
using (var sqlReader = cmd.ExecuteReader())
{
while (sqlReader.Read())
{
addresses.Add(sqlReader.GetString(0));
}
}
connectionString.Close();
}
foreach (var address in addresses.Distinct())
{
cbTransferTo.Add(address);
}
在您的 SQL中使用会更好DISTINCT
,这样您就可以让数据库进行重复数据删除,而不是将所有数据提取到您的程序中,然后再进行重复数据删除......
推荐阅读
- r - RStan - stan_file 模型代码中的问题 - 变分贝叶斯
- javascript - Vue dotenv 变量在服务器中不起作用
- gatsby - Gatsby 构建失败,没有任何有用的错误
- c - char* 的大小是多少?
- css - 尝试在单击汉堡菜单按钮时从左侧滑入菜单组件以在移动浏览器上占据整个屏幕
- clojurescript - 如何在 clojurescript 中创建 onclick 事件?
- date - 这是什么类型的日期字符串?`20210713T015433.354Z`
- python - 如何打开没有错误的优化 GIF?
- macos - Confluent Kafka - 控制中心未安装,无法启动
- hardware - 你能把MODBUS转换成CANBUS吗?
我有一个 SQL 查询,它从 SQL Express DB 读取字符串数据(切换到 Azure)。检索到数据后,我将其读入数组,然后在组合框中显示数组的内容。我没有收到任何错误,但是,在组合框中,显示了一个额外的字段,我无法弄清楚如何防止这种情况。
我有一个用 {get; 创建的数组的类 放;}。下面是主程序的实际代码:
问题描述
我有一个 SQL 查询,它从 SQL Express DB 读取字符串数据(切换到 Azure)。检索到数据后,我将其读入数组,然后在组合框中显示数组的内容。我没有收到任何错误,但是,在组合框中,显示了一个额外的字段,我无法弄清楚如何防止这种情况。
我有一个用 {get; 创建的数组的类 放;}。下面是主程序的实际代码:
LocationList[] address1 = null;
string sql = @"SELECT Address1 FROM DN";
using (var cmd = new SqlCommand(sql, connectionString))
{
connectionString.Open();
using (var sqlReader = cmd.ExecuteReader())
{
var list = new List<LocationList>();
while (sqlReader.Read())
{
list.Add(new LocationList { Address1 = sqlReader.GetString(0) });
}
address1 = list.Distinct().ToArray();
sqlReader.Close();
}
connectionString.Close();
}
cbTransferTo.Items.Add(address1.Cast<string>());
此外,每次单击下拉菜单时,都会添加一个额外的项目,而无需启动和停止程序。它不应该这样做,我找不到问题。
程序需要做的只是显示它从 SQL 数据库表中获取的内容,该表是一个位置列表。
非常感谢您的帮助。
调用address1.Cast<string>()
返回一个IEnumerable
实现类型,而不是一个字符串。您正在将此类型添加到您的组合框中,并通过调用ToString
返回类型名称来呈现它。
因为它你的代码是错误的。address1
是 的序列LocationList
,而不是string
。因为调用Cast
是惰性评估的,所以您没有看到错误。
解决方案
您正在向组合框中添加单个项目,但该单个项目是来自 的返回值Cast<string>()
,它是一个序列。该类型不会覆盖ToString()
,因此您将获得该类型的名称。
我相信您想要做的是将所有项目添加到组合框中:
foreach (var location in address1)
{
cbTransferTo.Add(location.Address1);
}
请注意,如果您只是遍历 的结果Cast<string>()
,无论如何我都希望出现异常 - 因为address1
是一系列LocationList
项目,而不是字符串。不过,尚不清楚您为什么要使用LocationList
它-我怀疑仅使用字符串开头会更简单。更简单的代码是:
string sql = @"SELECT Address1 FROM DN";
List<string> addresses = new List<string>();
using (var cmd = new SqlCommand(sql, connectionString))
{
connectionString.Open();
using (var sqlReader = cmd.ExecuteReader())
{
while (sqlReader.Read())
{
addresses.Add(sqlReader.GetString(0));
}
}
connectionString.Close();
}
foreach (var address in addresses.Distinct())
{
cbTransferTo.Add(address);
}
在您的 SQL中使用会更好DISTINCT
,这样您就可以让数据库进行重复数据删除,而不是将所有数据提取到您的程序中,然后再进行重复数据删除......
推荐阅读
- r - RStan - stan_file 模型代码中的问题 - 变分贝叶斯
- javascript - Vue dotenv 变量在服务器中不起作用
- gatsby - Gatsby 构建失败,没有任何有用的错误
- c - char* 的大小是多少?
- css - 尝试在单击汉堡菜单按钮时从左侧滑入菜单组件以在移动浏览器上占据整个屏幕
- clojurescript - 如何在 clojurescript 中创建 onclick 事件?
- date - 这是什么类型的日期字符串?`20210713T015433.354Z`
- python - 如何打开没有错误的优化 GIF?
- macos - Confluent Kafka - 控制中心未安装,无法启动
- hardware - 你能把MODBUS转换成CANBUS吗?