.NETCore中的EPPlus对于完全相同的代码产生不同的结果

时间:2019-03-26 20:07:21

标签: .net-core epplus

我有直接在.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方法中吗?

1 个答案:

答案 0 :(得分:2)

啊! @JonSkeet和@joesewel感谢您的答复。事实证明,Epplus的.net核心版本将工作表索引从1更改为0,这就是为什么代码的完整100%副本在.NETCore和Framework之间无法正常工作的原因。 <>