Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何";Linq到数据表“;使用自己的DataTable类_C#_Linq_Lambda_Datatable - Fatal编程技术网

C# 如何";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&

我如何将这个linq查询产生的结果放入我自己的DataTable类中

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