【发布时间】:2016-04-22 08:34:40
【问题描述】:
我试图比较 2 个结果类型的列表,它不断地只返回整个结果列表,它似乎没有过滤掉任何东西。
这是代码:
List<Results> Veranderingen = resultaten2.Except(resultaten).ToList();
foreach(Results x in Veranderingen)
{
MessageBox.Show("Nieuwe Data gevonden: " + x.titel + "Van de website" + x.url + "");
}
列表被填充的代码是这样的(不太重要):
private void Lijst2invullen()
{
OleDbConnection connection = new OleDbConnection();
connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\martijn\Dropbox\Proftaak Periode 2 Identity\Database11.accdb;
Persist Security Info=False;";
connection.Open();
OleDbCommand cmd2 = new OleDbCommand();
cmd2.Connection = connection;
cmd2.CommandText = "SELECT ZoekcriteriaID from Zoekcriteria WHERE ZoekCriteria = '" + Convert.ToString(cbzoektermselecteren.Text) + "';";
OleDbDataReader reader2 = cmd2.ExecuteReader();
if (reader2.Read())
{
refreshid2 = Convert.ToInt32(reader2["ZoekcriteriaID"]);
}
OleDbCommand command5 = new OleDbCommand();
command5.Connection = connection;
command5.CommandText = "SELECT Titel, Webadress from Resultaat WHERE ZoekcriteriaID = " + refreshid2 + ";";
OleDbDataReader reader3 = command5.ExecuteReader();
while (reader3.Read())
{
Results result = new Results();
result.url = Convert.ToString(reader3["Webadress"]);
result.titel = Convert.ToString(reader3["Titel"]);
resultaten2.Add(result);
}
reader3.Close();
label1.Text = "Ziet er goed uit!";
}
private void Lijst1invullen()
{
OleDbConnection connection = new OleDbConnection();
connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\martijn\Dropbox\Proftaak Periode 2 Identity\Database11.accdb;
Persist Security Info=False;";
connection.Open();
OleDbCommand cmd1 = new OleDbCommand();
cmd1.Connection = connection;
cmd1.CommandText = "SELECT ZoekcriteriaID from Zoekcriteria WHERE ZoekCriteria = '" + Convert.ToString(cbzoektermselecteren.Text) + "';";
OleDbDataReader reader1 = cmd1.ExecuteReader();
if (reader1.Read())
{
refreshid = Convert.ToInt32(reader1["ZoekcriteriaID"]);
}
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
command.CommandText = "SELECT Titel, Webadress from Resultaat WHERE ZoekcriteriaID = " + refreshid + ";";
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Results result = new Results();
result.url = Convert.ToString(reader["Webadress"]);
result.titel = Convert.ToString(reader["Titel"]);
resultaten.Add(result);
}
reader.Close();
reader1.Close();
OleDbCommand command2 = new OleDbCommand();
command2.Connection = connection;
command2.CommandText = "DELETE * FROM Resultaat WHERE ZoekcriteriaID = " + refreshid + ";";
command2.ExecuteNonQuery();
OleDbCommand command3 = new OleDbCommand();
command3.Connection = connection;
command3.CommandText = "DELETE * FROM Zoekcriteria WHERE ZoekCriteriaID = " + refreshid + ";";
command3.ExecuteNonQuery();
search.zoekterm = cbzoektermselecteren.Text;
search.InsertZoekcriteria();
search.searchding();
}
我认为我在 except 方法的语法中做错了任何人可以帮助我吗?
【问题讨论】:
-
你能显示
Results类吗?它是否定义了Equals和GetHashCode? -
Results 类不过是一个有 2 个属性来存储数据的类,我不知道 Equals 和 GetHashCode 是做什么的,所以我没有在类中定义它们。
-
如果resultaten2的所有元素都不在resultaten中,那么Except方法将返回resultaten2的全部内容。
-
如果 Resultaten 和 Resultaten2 之间的 10 个元素中有 9 个相同,它仍然返回 Resultaten2 的全部内容
-
只有一个参数,除了使用默认比较器,这显然不起作用。所以你可能需要传递一个 IEqualityComparer 对象作为第二个参数来告诉它如何比较结果。