如何使用C#在datatable中检查相等的行数和相等的文件名 [英] How can I check for equal no of rows and equal filenames in datatable using C#

查看:84
本文介绍了如何使用C#在datatable中检查相等的行数和相等的文件名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中我有三个数据表



c#三个数据表的代码



  //   Datatable1  

DataView view = wavdt.DefaultView ;
view.Sort = Wfname;
DT1 = view.ToTable();

// Datatable2

DataView view = basedt.DefaultView;
view.Sort = Bfname;
DT2 = view.ToTable();

// Datatable3

DataView view = templatedt.DefaultView;
view.Sort = Tfname;
DT3 = view.ToTable();



我需要确保所有三个数据表在所有三个数据表中包含相同的行数和相同的文件名我能做到这一点。我知道我们可以写一个条件来查看(dt1.rows.count == dt2.rows.count == dt3.rows.count)行数,但我怎么能检查所有相同的文件名三个datatables.My文件名将相同,但扩展名将不同。



如果我在datatable1中有123.wmv​​我将在第二个数据表中有123.doc并且相同123在第三个数据表中,使用doc或docx扩展名。如果我在第一个数据表中有五行,我需要确保我的剩余数据表包含相同的五行具有相同的文件名,如果没有那么我应该显示错误消息并停止执行我的下一行代码



我的尝试:



因为我是初学者我无法找到这样做的方法,我无法继续这样做

解决方案

< blockquote>参考这个例子



 DataTable dt1 = new DataTable(); 
dt1.Columns.Add(ColumnName);
dt1.Rows.Add(aa.pdf);
dt1.Rows.Add(bb.txt);
DataTable dt2 = new DataTable();
dt2.Columns.Add(ColumnName);
dt2.Rows.Add(aa.pdf);
dt2.Rows.Add(bb.txt);
DataTable dt3 = new DataTable();
dt3.Columns.Add(ColumnName);
dt3.Rows.Add(aa.pdf);
dt3.Rows.Add(bb.txt);
if(dt1.Rows.Count == dt2.Rows.Count&& dt2.Rows.Count == dt3.Rows.Count){
string [] dt1Names = dt1.Rows.OfType< ; DataRow>()。选择(row => System.IO.Path.GetFileNameWithoutExtension(row [ColumnName]。ToString())。ToLower())。ToArray();
string [] dt2Names = dt2.Rows.OfType< DataRow>()。选择(row => System.IO.Path.GetFileNameWithoutExtension(row [ColumnName]。ToString())。ToLower()) .ToArray();
string [] dt3Names = dt3.Rows.OfType< DataRow>()。选择(row => System.IO.Path.GetFileNameWithoutExtension(row [ColumnName]。ToString())。ToLower()) .ToArray();
if(dt1Names.Intersect(dt2Names).Count()== dt1.Rows.Count&& dt1.Rows.Count == dt2Names.Intersect(dt3Names).Count())
{
//文件名匹配
}
else {
//不匹配
}

}



它可以通过多种方式完成,这是其中之一

参考 LINQ Except,Intersect和Union Method / Operator in C# [ ^ ]

路径.GetFileNameWithoutExtension方法(字符串)(System.IO) [ ^ ]


In my application i have three datatables

c# code for three datatables

//Datatable1

DataView view = wavdt.DefaultView;
view.Sort = "Wfname";
DT1 = view.ToTable();

//Datatable2

DataView view = basedt.DefaultView;
view.Sort = "Bfname";
DT2 = view.ToTable();  

//Datatable3

DataView view = templatedt.DefaultView;
view.Sort = "Tfname";
DT3 = view.ToTable();


I need to ensure that all the three datatables contain same no of rows and same filenames in all the three datatables How can i do this.I know that we can write a condition to see (dt1.rows.count == dt2.rows.count==dt3.rows.count) for rows count but how can i check for same file names in all the three datatables.My filenames will be same but extensions will be different.

If i have 123.wmv in datatable1 i will have 123.doc in second datatable and same 123 in third datatable either with doc or docx extension.If i have five rows in 1st datatable i need to ensure that my remaining datatables contain same five rows with same filenames if not then i should show error message and stop execution of my next lines of code

What I have tried:

as i am very beginner i could not find way for doing this and i could not move forward to do this

解决方案

refer this example

DataTable dt1 = new DataTable();
           dt1.Columns.Add("ColumnName");
           dt1.Rows.Add("aa.pdf");
           dt1.Rows.Add("bb.txt");
           DataTable dt2 = new DataTable();
           dt2.Columns.Add("ColumnName");
           dt2.Rows.Add("aa.pdf");
           dt2.Rows.Add("bb.txt");
           DataTable dt3 = new DataTable();
           dt3.Columns.Add("ColumnName");
           dt3.Rows.Add("aa.pdf");
           dt3.Rows.Add("bb.txt");
           if (dt1.Rows.Count == dt2.Rows.Count && dt2.Rows.Count == dt3.Rows.Count) {
               string[] dt1Names = dt1.Rows.OfType<DataRow>().Select(row => System.IO.Path.GetFileNameWithoutExtension(row["ColumnName"].ToString()).ToLower()).ToArray();
               string[] dt2Names = dt2.Rows.OfType<DataRow>().Select(row => System.IO.Path.GetFileNameWithoutExtension(row["ColumnName"].ToString()).ToLower()).ToArray();
               string[] dt3Names = dt3.Rows.OfType<DataRow>().Select(row => System.IO.Path.GetFileNameWithoutExtension(row["ColumnName"].ToString()).ToLower()).ToArray();
               if (dt1Names.Intersect(dt2Names).Count() == dt1.Rows.Count && dt1.Rows.Count == dt2Names.Intersect(dt3Names).Count())
               {
                   // file names matching
               }
               else {
                   // not matching
               }

           }


it can be done in many ways, this is one of them
refer LINQ Except, Intersect and Union Method/ Operator in C#[^]
Path.GetFileNameWithoutExtension Method (String) (System.IO)[^]


这篇关于如何使用C#在datatable中检查相等的行数和相等的文件名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆