如何检查列表列表是否包含另一个列表

时间:2017-03-31 14:22:44

标签: c# list

我想创建一个列表,其中包含两个int值,让我们说arrfirst,另一个列表将保存arrfirst列表,让我们说arrsecond然后检查是否{{} 1}}包含已定义的arrsecond。现在我创建了列表但是当我尝试使用arrfirst时它不起作用。

.Contains

这是我的代码。当我调试时,我可以看到List<List<int>> Eklenenler = new List<List<int>>(); for (int i = 0; i < YourTable.Rows.Count; i++) { prjAd = YourTable.Rows[i].Field<string>("F1"); if (prjAd != "Servis Adresi") { wesAd = YourTable.Rows[i].Field<string>("F2"); RowPrj = tbProjeler.AsEnumerable().Where(r => r.Field<string>("prjAd") == prjAd).FirstOrDefault(); RowWes = tbServisler.AsEnumerable().Where(k => k.Field<string>("wesAd") == wesAd).FirstOrDefault(); prjId = RowPrj.Field<int>("prjId"); wesId = RowWes.Field<int>("wesId"); List<int> temp = new List<int>(); temp.Add(prjId); temp.Add(wesId); if (!Eklenenler.Contains(temp)) { sqlExProjeEkle = "INSERT INTO NLK_PRJ_Webservisler (prjId,wesId) Values (" + prjId + "," + wesId + ")"; dco.Execute(sqlExProjeEkle); Eklenenler.Add(temp); } else { } } } 值是正确的,并且在第二次循环时,temp位于temp列表中,但它始终位于Eklenenler块中。例如,第一个循环显示iftemp[0]=36进入阻塞,第二个循环再次temp[1]=42temp[0]=36进入temp[1]=42Eklenenler[0][0]=36所以它包含临时但它仍然存在。我如何解决这个问题以及为什么这会返回false而在Eklenenler[0][1]=42中找不到这个temp。谢谢。

2 个答案:

答案 0 :(得分:1)

你可以用linq在一行中用这样的东西

来做
if (!Eklenenler.Any(c => c.SequenceEqual(temp)))
{
    sqlExProjeEkle = "INSERT INTO NLK_PRJ_Webservisler (prjId,wesId) Values (" + prjId + "," + wesId + ")";
    dco.Execute(sqlExProjeEkle);
    Eklenenler.Add(temp);

}
else
{

}

别忘了添加

using System.Linq;

答案 1 :(得分:0)

这是使用foreach循环的答案。

foreach (List<int> list in Eklenenler)
{
    if (list.SequenceEqual(temp))
    {
        //Do work
    }
}
相关问题