我怎样才能把这个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);我已经尝试过了,但系统警告我不能将EnumerableRowCollection转换为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);因此,我尝试将其全部放入EnumerableRowCollection中,但在这里我得到了“嵌入的语句不能是声明或标记的语句”
EnumerableRowCollection<DataRow> selection = ConfigurationDataTable
.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);我做错了什么?
发布于 2020-12-10 15:15:33
我去掉了定制类,只对两个数据表使用了本机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();发布于 2020-12-10 00:19:01
DataTable不是从IEnumerable继承的:
https://docs.microsoft.com/en-us/dotnet/api/system.data.datatable.select
最好是创建一个继承自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;关于如何使用DataRow创建IEnumerable类对象,我可以给出更好的示例,但这需要大量的代码。如果你需要的话,请告诉我。
https://stackoverflow.com/questions/65220142
复制相似问题