我有2个DataTables。一个代表客户,另一个代表CustomerContacts。
我需要查找没有任何CustomerContact行的所有Customer行。
除了有2个循环并使用DataViews和FindRows查找哪些客户没有任何联系人之外,是否有更简单的编码方式?我不熟悉LINQ,不希望将它用于我当前的项目。
我正在使用.NET 4.5
我无法在数据库中直接使用SQL,因为没有“数据库”。我通过自定义读取Excel文件来填充DataTable。
答案 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"]));
其中
dtCustomers
和dtCustomerContacts
是数据表,
"id"
和"customerId"
是主键和外键(假设它们是int
),
result
是没有任何联系人的客户ID列表。