C#DataTable查找另一个DataTable中不存在的行

时间:2016-10-04 08:47:28

标签: c# datatable

我有2个DataTables。一个代表客户,另一个代表CustomerContacts。

我需要查找没有任何CustomerContact行的所有Customer行。

除了有2个循环并使用DataViews和FindRows查找哪些客户没有任何联系人之外,是否有更简单的编码方式?我不熟悉LINQ,不希望将它用于我当前的项目。

我正在使用.NET 4.5

我无法在数据库中直接使用SQL,因为没有“数据库”。我通过自定义读取Excel文件来填充DataTable。

3 个答案:

答案 0 :(得分:1)

尝试以下代码。它不使用任何LINQ。将customerID替换为表格的实际Id列。

DataTable Customers  = new DataTable();//fill this table from db
DataTable CustomersContacts = new DataTable();//fill this table from db
List<string> NoContactCus = new List<string>();
foreach (DataRow Customer in Customers.Rows)
{
    DataRow[] contacts = CustomersContacts.Select(string.Format("customerID={0}", Customer["customerID"].ToString()));
    if (contacts.Count() == 0)
        NoContactCus.Add(Customer["customerID"].ToString());
}

答案 1 :(得分:0)

您可以使用LINQ完成此操作,如下所示(a&amp; b是两个数据表)

var query = (from x in a.AsEnumerable()
          join y in b.AsEnumerable() on x.Field<int>("col1") equals y.Field<int>("col1")
          select new { col1= y.Field<int>("col1"), col2=x.Field<int>("col2") }).ToList();

答案 2 :(得分:0)

LINQ是你的朋友。

var result = dtCustomers.AsEnumerable().Select(row => (int)row["id"])
    .Except(dtCustomerContacts.AsEnumerable().Select(row => (int)row["customerId"]));

其中
dtCustomersdtCustomerContacts是数据表,
"id""customerId"是主键和外键(假设它们是int),
result是没有任何联系人的客户ID列表。