.net core NETCore中的EPPlus为完全相同的代码生成不同的结果

.net core NETCore中的EPPlus为完全相同的代码生成不同的结果,.net-core,epplus,.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.Q

我将代码直接复制并粘贴在.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();
}
var data=ReadDataFromSpreadSheet();
使用(var source=newsqlconnection(“myconnection”))
{
source.Open();
var queryData=source.Query(SelectSQL.ToList();
var results=新列表();
foreach(数据中的var accountId)
{
var a=queryData.SingleOrDefault(x=>
x、 AccountNumber==accountId);
如果(a!=null)
结果.添加(accountId);
其他的
{
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(“insterspect=“+results.Count”);
Console.ReadLine();
}

NETFramework中的结果约为1750行,这些行位于电子表格数据中,而不是模型数据中。.NETCore版本大约有730行。请注意,循环或相交给出了相同的值,因此我猜问题出在Equals方法中。

UGH@JonSkeet和@joesewel感谢您的回复。事实证明,Epplus的.net core版本将工作表索引从1更改为0,这就是为什么完整的100%代码副本在.NETCore和Framework之间不起作用的原因

那么,在没有数据库访问的情况下,您可以使用硬编码数据复制它吗?这将使帮助您变得更容易。也许这与?有关。我将致力于使用硬编码数据进行复制。如果它是由于不同的
GetHashCode
实现造成的,那么它看起来会非常糟糕。事实证明,您可以进行更改以使其行为相同。From:Breaking.NET Core中的更改:默认情况下,工作表集合将以零为基础。可以通过将ExcelPackage.Compatibility.IsWorksheets1Based设置为true来更改此设置。NET Core将此属性设置为false,.NET 3.5和.NET 4版本出于向后兼容的原因将此属性设置为true。也可以通过.Net Core中的appsettings.json文件或app.config文件设置此属性。