У меня есть код, который я скопировал и вставил непосредственно между консольным приложением, встроенным в .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 строк.Обратите внимание, что цикл ИЛИ Intersect дает одинаковые значения, поэтому я думаю, что проблема в методе Equals?