2013-02-28 37 views
1

DataSet oDs = new DataSet(); DataTable odt = new DataTable();比较2行数据表中的行的唯一组合并查找它们是否使用LINQ相同

 odt.Columns.Add(new DataColumn("FILE_ID", typeof(string))); 
     odt.Columns.Add(new DataColumn("ID", typeof(string))); 
     oDs.Tables.Add(odt); 
     oDs.AcceptChanges(); 

     for (int i = 1; i < 3; i++) 
     { 
      DataRow oDr = oDs.Tables[0].NewRow(); 
      oDr["FILE_ID"] = "a" + i; 
      oDr["ID"] = "b" + i; 
      oDs.Tables[0].Rows.Add(oDr); 
     } 
     for (int i = 1; i < 3; i++) 
     { 
      DataRow oDr = oDs.Tables[0].NewRow(); 
      oDr["FILE_ID"] = "c" + i; 
      oDr["ID"] = "d" + i; 
      oDs.Tables[0].Rows.Add(oDr); 
     } 
     oDs.AcceptChanges(); 

     DataTable odt1 = new DataTable(); 

     odt1.Columns.Add(new DataColumn("FILE_ID", typeof(string))); 
     odt1.Columns.Add(new DataColumn("ID", typeof(string))); 
     oDs.Tables.Add(odt1); 
     oDs.AcceptChanges(); 

     for (int i = 1; i < 3; i++) 
     { 
      DataRow oDr = oDs.Tables[1].NewRow(); 
      oDr["FILE_ID"] = "a" + i; 
      oDr["ID"] = "b" + i; 
      oDs.Tables[1].Rows.Add(oDr); 
     } 
     for (int i = 1; i < 3; i++) 
     { 
      DataRow oDr = oDs.Tables[1].NewRow(); 
      oDr["FILE_ID"] = "c" + i; 
      oDr["ID"] = "d" + i; 
      oDs.Tables[1].Rows.Add(oDr); 
     } 
     oDs.AcceptChanges(); 

我需要一个LINQ查询的,我可以找到,如果行(FILE_ID + ID)的值的组合是唯一&,如果他们在这两个数据表

+0

你有2个表格。每个都有多行。因此,对于给定的表,您想要concatonate行值(FILE_ID + ID)并将其与该表的其他行进行比较以确定是否所有结果都是唯一的?此外,你想确保两个表具有相同的内容? – 2013-02-28 16:32:56

+0

我不想连接两行,但行中值的组合必须是唯一的,并确保两个表具有相同的行组合 – shiju87 2013-02-28 16:38:00

回答

0

这得到了相同的你非唯一值:

var notUnique = odt.AsEnumerable() 
          .GroupBy(x => (string) x["FILE_ID"] + x["ID"]) 
          .Where(g => g.Count() > 1); 

发现是在一个表中,但没有其他可以在这里找到 Compares

0123的值

你的具体情况是这样的:

var differentRows = 
      odt.AsEnumerable().Where(
       o => 
       odt1.AsEnumerable().All(
        o1 => ((string) o["FILE_ID"] + o["ID"]) != ((string) o1["FILE_ID"] + o1["ID"]))) 
       .Union(odt1.AsEnumerable().Where(
       o1 => odt.AsEnumerable().All(o => ((string)o["FILE_ID"] + o["ID"]) != ((string)o1["FILE_ID"] + o1["ID"])))); 

请记住,这好比是“除”方法,其中重复的记录不会标榜自己的不同。但是,既然你正在检查上面的模糊,我会认为不需要进一步的检查。

+0

此查询是正确的,直到任何列中没有DBNull值。如果无意中有任何DBNULL.Value出现在任何DataTable中,则会出现问题。 – shiju87 2013-03-01 04:55:17

相关问题