2016-10-22 38 views
-2

如下圖所示如何根據.net中的另一個數據表刪除一個數據錶行?

Fieldname    Newvalue 

antenastructure  12 
slno     2 
servicelevel 
powersupply 

另一個數據表作爲dtMaster

Mastertabe   Masterfield   infoid  zvalue  qvalue 

M_seq    antenastructure  123   
M_seq    slno     1  
M_seq    servicelevel   133 
M_seq    powersupply   154 
M_seq    azimheight   124 

我想是我想從dtMaster刪除行如果dtFirstFieldname不包含我已經一個數據表命名dtFirstNewvalue即這裏我想刪除行包含servicelevelpowersupply這兩個都是大數據表,其中我張貼的小部分

+1

來吧,這是微不足道的 - 你應該能夠自己編寫這個了 - 告訴我們您的迄今爲止的努力?只需在dtFirst上執行Rows.Select以獲取沒有NewValues的項目,然後迭代dtMaster,在dtFirst中刪除沒有值的行。 –

+0

我使用了鏈接http://www.codeproject.com/Questions/686406/How-To-Compare-and-delete-datatable-row-using-Csha中提到的邏輯,但他們都沒有成功 – peter

回答

1

看看這個工程

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      DataTable dtFirst = new DataTable(); 
      dtFirst.Columns.Add("Fieldname", typeof(string)); 
      dtFirst.Columns.Add("Newvalue", typeof(int)); 
      dtFirst.Columns["Newvalue"].AllowDBNull = true; 

      dtFirst.Rows.Add(new object[] {"antenastructure", 12}); 
      dtFirst.Rows.Add(new object[] {"slno", 2}); 
      dtFirst.Rows.Add(new object[] {"servicelevel"}); 
      dtFirst.Rows.Add(new object[] {"powersupply"}); 

      string[] dtFirstValidRows = dtFirst.AsEnumerable().Where(x => x.Field<int?>("Newvalue") != null).Select(x => x.Field<string>("Fieldname")).ToArray(); 

      DataTable dtMaster = new DataTable(); 
      dtMaster.Columns.Add("Mastertabe", typeof(string)); 
      dtMaster.Columns.Add("Masterfield", typeof(string)); 
      dtMaster.Columns.Add("infoid", typeof(int)); 
      dtMaster.Columns["infoid"].AllowDBNull = true; 
      dtMaster.Columns.Add("zvalue", typeof(int)); 
      dtMaster.Columns["zvalue"].AllowDBNull = true; 
      dtMaster.Columns.Add("qvalue", typeof(int)); 
      dtMaster.Columns["qvalue"].AllowDBNull = true; 

      dtMaster.Rows.Add(new object[] {"M_seq", "antenastructure", 123});   
      dtMaster.Rows.Add(new object[] {"M_seq", "slno", 1});   
      dtMaster.Rows.Add(new object[] {"M_seq", "servicelevel", 133});   
      dtMaster.Rows.Add(new object[] {"M_seq", "powersupply", 154});   
      dtMaster.Rows.Add(new object[] {"M_seq", "azimheight", 124}); 

      dtMaster = dtMaster.AsEnumerable().Where(x => dtFirstValidRows.Contains(x.Field<string>("Masterfield"))).CopyToDataTable(); 
     } 
    } 
} 
1

這是輸入我的手機上的僞代碼:

var rowsWithoutVals = dtFirst.Rows.Select("newValues = ''"); 

for(int i = dtMaster.Rows.Count - 1; i > -1;i--) { 

foreach (var emptyItem in rowsWithoutVals) { 
    if (emptyItem[0] == dtMaster[i][1]) { 
    dtMaster.Rows.RemoveAt[i]; 
    break; 
    } 
} 
} 
相關問題