C# 如何";Linq到数据表“;使用自己的DataTable类
我如何将这个linq查询产生的结果放入我自己的DataTable类中C# 如何";Linq到数据表“;使用自己的DataTable类,c#,linq,lambda,datatable,C#,Linq,Lambda,Datatable,我如何将这个linq查询产生的结果放入我自己的DataTable类中 public class MyDataTable : DataTable { public MyDataTable() { this.Columns.Add("ColumnName1"); this.Columns.Add("ColumnName2"); this.Columns.Add("ColumnName3&
public class MyDataTable : DataTable
{
public MyDataTable()
{
this.Columns.Add("ColumnName1");
this.Columns.Add("ColumnName2");
this.Columns.Add("ColumnName3");
this.Columns.Add("ColumnName4");
}
}
我的linq查询:
MasterDataTable
.AsEnumerable()
.Where(rr =>
rr.Field<string>("ColumnName1") == SelectedValue1 &&
rr.Field<string>("ColumnName2") == SelectedValue2 &&
rr.Field<string>("ColumnName3") == SelectedValue3 &&
rr.Field<string>("ColumnName4") == SelectedValue4)
).Select(rr => rr);
主数据表
.可计算的()
.其中(rr=>
rr.字段(“ColumnName1”)==SelectedValue1&&
rr.字段(“ColumnName2”)==SelectedValue2&&
rr.字段(“ColumnName3”)==SelectedValue3&&
rr.字段(“ColumnName4”)==SelectedValue4)
).选择(rr=>rr);
我已经尝试过了,但是有人警告我不能将EnumerablerRowCollection转换为MyDataTable
MyDataTable dt = MasterDataTable
.AsEnumerable()
.Where(rr =>
rr.Field<string>("ColumnName1") == SelectedValue1 &&
rr.Field<string>("ColumnName2") == SelectedValue2 &&
rr.Field<string>("ColumnName3") == SelectedValue3 &&
rr.Field<string>("ColumnName4") == SelectedValue4)
).Select(rr => rr);
MyDataTable dt=MasterDataTable
.可计算的()
.其中(rr=>
rr.字段(“ColumnName1”)==SelectedValue1&&
rr.字段(“ColumnName2”)==SelectedValue2&&
rr.字段(“ColumnName3”)==SelectedValue3&&
rr.字段(“ColumnName4”)==SelectedValue4)
).选择(rr=>rr);
然后我尝试在EnumerablerRowCollection中获取所有信息,但这里我得到的是“嵌入语句不能是声明或标记语句”
EnumerablerRowCollection选择=ConfigurationDataTable
.可计算的()
.其中(rr=>
rr.字段(“ColumnName1”)==SelectedValue1&&
rr.字段(“ColumnName2”)==SelectedValue2&&
rr.字段(“ColumnName3”)==SelectedValue3&&
rr.字段(“ColumnName4”)==SelectedValue4)
).选择(rr=>rr);
我做错了什么?数据表不是从IEnumerable继承的: 您最好创建一个从IEnumerable继承的自定义类,并创建方法,以便使用DataTable轻松插入数据 以下是手动读取数据的方式:
// Create your DataTable
var t = new DataTable();
t.Columns.Add("ColumnName1"); // Add your column names
t.Columns.Add("ColumnName2"); // (it is better to use one of the overload
t.Columns.Add("ColumnName3"); // methods that defines the row's data type
// Create an instance of your new DataRow:
var row = t.NewRow();
// populate your data into your new row:
row["ColumnName1"] = "Bill";
row["ColumnName2"] = "Ted";
row["ColumnName3"] = "Excellent";
// add the DataRow to your DataTable
t.Rows.Add(row);
// Now retrieve the data using something that inherits from IEnumerable
var list = new List<String>();
// Loop through your DataTable to get the individual records
foreach (DataRow row1 in t.Rows) {
// notice that above you MUST cast the row. It fails if you use "var row".
list.Add(String.Format("{0} {1} {2}", row["ColumnName1"], row["ColumnName2"], row["ColumnName3"]));
}
// return your IEnumerable item
return list;
//创建数据表
var t=新数据表();
t、 Columns.Add(“ColumnName1”);//添加您的列名
t、 Columns.Add(“ColumnName2”);//(最好使用一个过载传感器
t、 Columns.Add(“ColumnName3”);//定义行数据类型的方法
//创建新DataRow的实例:
var row=t.NewRow();
//将数据填充到新行中:
行[“ColumnName1”]=“票据”;
行[“ColumnName2”]=“Ted”;
行[“ColumnName3”]=“优秀”;
//将DataRow添加到DataTable中
t、 行。添加(行);
//现在使用从IEnumerable继承的内容检索数据
var list=新列表();
//循环遍历数据表以获取各个记录
foreach(t.Rows中的数据行第1行){
//请注意,上面必须强制转换该行。如果使用“var row”,则会失败。
添加(String.Format(“{0}{1}{2}”、行[“ColumnName1”]、行[“ColumnName2”]、行[“ColumnName3”]);
}
//返回您的IEnumerable项目
退货清单;
关于如何使用DataRow创建IEnumerable类对象,我可以提供更好的示例,但这需要大量代码。如果需要,请告诉我。DataTable不会从IEnumerable继承: 您最好创建一个从IEnumerable继承的自定义类,并创建方法,以便使用DataTable轻松插入数据 以下是手动读取数据的方式:
// Create your DataTable
var t = new DataTable();
t.Columns.Add("ColumnName1"); // Add your column names
t.Columns.Add("ColumnName2"); // (it is better to use one of the overload
t.Columns.Add("ColumnName3"); // methods that defines the row's data type
// Create an instance of your new DataRow:
var row = t.NewRow();
// populate your data into your new row:
row["ColumnName1"] = "Bill";
row["ColumnName2"] = "Ted";
row["ColumnName3"] = "Excellent";
// add the DataRow to your DataTable
t.Rows.Add(row);
// Now retrieve the data using something that inherits from IEnumerable
var list = new List<String>();
// Loop through your DataTable to get the individual records
foreach (DataRow row1 in t.Rows) {
// notice that above you MUST cast the row. It fails if you use "var row".
list.Add(String.Format("{0} {1} {2}", row["ColumnName1"], row["ColumnName2"], row["ColumnName3"]));
}
// return your IEnumerable item
return list;
//创建数据表
var t=新数据表();
t、 Columns.Add(“ColumnName1”);//添加列名
t、 Columns.Add(“ColumnName2”);/(最好使用一个重载
t、 Columns.Add(“ColumnName3”);//定义行数据类型的方法
//创建新DataRow的实例:
var row=t.NewRow();
//将数据填充到新行中:
行[“ColumnName1”]=“票据”;
行[“ColumnName2”]=“Ted”;
行[“ColumnName3”]=“优秀”;
//将DataRow添加到DataTable中
t、 行。添加(行);
//现在使用从IEnumerable继承的内容检索数据
var list=新列表();
//循环遍历数据表以获取各个记录
foreach(t.Rows中的数据行第1行){
//请注意,上面必须强制转换该行。如果使用“var row”,则会失败。
添加(String.Format(“{0}{1}{2}”、行[“ColumnName1”]、行[“ColumnName2”]、行[“ColumnName3”]);
}
//返回您的IEnumerable项目
退货清单;
我可以为您提供更好的示例,说明如何使用DataRow创建IEnumerable类对象,但这需要大量代码。如果您需要,请告诉我。我放弃了自定义类,只对两个DataTable使用了本机DataTable类。这似乎可以解决问题
DataTable dt = MasterDataTable
.AsEnumerable()
.Where(rr =>
rr.Field<string>("ColumnName1") == SelectedValue1 &&
rr.Field<string>("ColumnName2") == SelectedValue2 &&
rr.Field<string>("ColumnName3") == SelectedValue3 &&
rr.Field<string>("ColumnName4") == SelectedValue4)
).Select(rr => rr)
.CopyToDataTable();
DataTable dt=MasterDataTable
.可计算的()
.其中(rr=>
rr.字段(“ColumnName1”)==SelectedValue1&&
rr.字段(“ColumnName2”)==SelectedValue2&&
rr.字段(“ColumnName3”)==SelectedValue3&&
rr.字段(“ColumnName4”)==SelectedValue4)
).选择(rr=>rr)
.CopyToDataTable();
我抛出了自定义类,只对这两个数据表使用了本机DataTable类。这似乎起到了作用
DataTable dt = MasterDataTable
.AsEnumerable()
.Where(rr =>
rr.Field<string>("ColumnName1") == SelectedValue1 &&
rr.Field<string>("ColumnName2") == SelectedValue2 &&
rr.Field<string>("ColumnName3") == SelectedValue3 &&
rr.Field<string>("ColumnName4") == SelectedValue4)
).Select(rr => rr)
.CopyToDataTable();
DataTable dt=MasterDataTable
.可计算的()
.其中(rr=>
rr.字段(“ColumnName1”)==SelectedValue1&&
rr.字段(“ColumnName2”)==SelectedValue2&&
rr.字段(“ColumnName3”)==SelectedValue3&&
rr.字段(“ColumnName4”)==SelectedValue4)
).选择(rr=>rr)
.CopyToDataTable();
主数据表
是否与MyDataTable
具有相同的列,或者是否有其他列未包含在MyDataTable
中?如果是这样,为什么您觉得需要为MyDataTable
创建自定义类?@pwilcox,是的,MasterDataTable实际上只是包含所有数据的MyDataTable的一个实例。至于你的第二个问题:我实际上在想同样的事情。实际上,我并没有做什么特别的事情。我想我可以只使用本机DataTable类。MasterDataTable
是否具有与MyDataTable
相同的列,或者是否有其他列未包含在MyDataTable
中?如果是这样,为什么您觉得需要为MyDataTable
创建自定义类?@pwilcox