我有直接在.NETFramework 4.7.1和.NETCore 2.2内置的控制台应用程序之间复制和粘贴的代码,执行时得到的结果完全不同。最初,我使用的是Intersect,但当我开始获得不同的结果时。这是代码:
var data = ReadDataFromSpreadSheet();
using (var source = new SqlConnection("myconnection"))
{
source.Open();
var queryData = source.Query<Model>(SelectSQL).ToList();
var results = new List<string>();
foreach (var accountId in data)
{
var a = queryData.SingleOrDefault(x =>
x.AccountNumber == accountId);
if (a != null)
results.Add(accountId);
else
{
Debug.WriteLine("WTF!");
}
}
var intersect = data.Intersect(queryData.Select(x => x.AccountNumber)).ToList();
results = results.OrderBy(x => x).ToList();
Console.WriteLine("Results = " + results.Count);
Console.WriteLine("Instersect = " + results.Count);
Console.ReadLine();
}
.NETFramework中的结果大约有1750行,这些行在电子表格数据中而不在模型数据中。 .NETCore版本大约有730行。注意循环或相交给出相同的值,所以我猜问题出在Equals方法中吗?
答案 0 :(得分:2)
啊! @JonSkeet和@joesewel感谢您的答复。事实证明,Epplus的.net核心版本将工作表索引从1更改为0,这就是为什么代码的完整100%副本在.NETCore和Framework之间无法正常工作的原因。 <>