IEnumerable Zip函数不能用于十进制类型,但可以用于其他类型
本文关键字:类型 用于 但可以 其他 Zip 十进制 不能 IEnumerable 函数 | 更新日期: 2023-09-27 17:51:21
我在Visual Studio的c#应用程序中使用zip函数合并两个IEnumerable对象。我有以下代码:
static void Main(){
using (var conn = new SqlConnection(connectionString)){
conn.Open();
IEnumerable<string> tmp1 = conn.Query<string>("SELECT NAME FROM Table1");
IEnumerable<string> tmp2 = conn.Query<string>("SELECT Type FROM Table1");
IEnumerable<decimal> mock1 = conn.Query<decimal>("SELECT value1 FROM mockData1");
IEnumerable<decimal> mock2 = conn.Query<decimal>("select value2 FROM mockData2");
foreach (var item in tmp1.Zip(tmp2, (a, b) => new { a, b })){
Console.WriteLine(item.a);
Console.WriteLine(item.b);
Console.ReadKey();
}
}
}
当我运行上面的代码时,控制台输出如下内容:
CorrectName1
CorrectType1
CorrectName2
CorrectType2
....
,这是我所期望的。但是,当我做以下更改时:
foreach (var item in mock1.Zip(mock2, (a, b) => new { a, b })){
Console.WriteLine(item.a);
Console.WriteLine(item.b);
Console.ReadKey();
}
程序完全跳过控制台输出,错误列表中没有错误。
从本质上讲,为什么程序对string类型的IEnumerables可以正常工作,而对decimal类型的IEnumerables却不行?在你问之前,我已经通过管理工作室检查了这两个查询,它们是正确的,我能够在只涉及两个集合独立的foreach循环中迭代mock1和mock2,但由于某种原因,zip函数似乎失败了IEnumerable<十进制>。十进制>
编辑:这里有两个foreach循环来确认我的假设,即查询不坏:
foreach (var item in mock1){
Console.WriteLine(item);
Console.ReadKey();
}
mock1的输出演示:
Value from mock1 (1)
Value from mock1 (2)
...
/* * */foreach (var item in mock2){
Console.WriteLine(item);
Console.ReadKey();
}
mock2的输出演示:
Value from mock2 (1)
Value from mock2 (2)
...
我猜您的数据库没有为查询返回数据。
:void Main()
{
IEnumerable<decimal> mock1 = new decimal[] { 1, 2, 3 };
IEnumerable<decimal> mock2 = new decimal[] { 4, 5, 6 };
foreach (var item in mock1.Zip(mock2, (a, b) => new { a, b }))
{
Console.WriteLine(item.a);
Console.WriteLine(item.b);
Console.Read();
}
}
1 4 2 53
6
这是我的错-我有10个数据点为mockData1和mockData2,但在我的手动SQL插入期间,我不小心将所有20个数据点添加到mockData1,而没有添加到mockData2。