2016-10-04 25 views
-1

私は2つのDataTableを持っています。 1つは顧客を表し、もう1つはCustomerContactsを表します。C#DataTableは、別のDataTableに存在しない行を見つけます。

CustomerContact行を持たないすべてのCustomer行を見つける必要があります。

2つのループを持ち、DataViewsとFindRowsを使用してどの顧客に連絡先がないのかを調べる以外に、簡単なコード作成方法がありますか?私はLINQに精通しておらず、私の現在のプロジェクトでは使用したくありません。

私は、「データベース」がないように私が直接、データベースにSQLを使用するカント.NET 4.5

を使用しています。私はカスタムのExcelファイルを読んでDataTablesにデータを取り込んでいます。

+0

あなたの質問に答えることはできませんが、あなたは本当にLINQに慣れるべきです。これは、最も単純なタスクでも標準のものになり、ほぼすべてのコードベースで見つけることになります。たとえMicrosoftがその使用をプッシュしています(TypeInfoクラスとそのプロパティのフィルタリングの1つの例) – pinkfloydx33

答えて

0

あなたは以下のコードを試してみてください

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(); 
1

(& bは二つのデータテーブルである)として、以下のLINQを使用してこれを達成することができます。 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()); 
} 
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のリストです。

+0

独自の2ループの作成とFindRowsの使用と比較して、パフォーマンスが良くなるか悪くなりますか? – AllSolutions

関連する問題