首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用自己的DataTable类"Linq to DataTable“

如何使用自己的DataTable类"Linq to DataTable“
EN

Stack Overflow用户
提问于 2020-12-09 23:49:47
回答 2查看 39关注 0票数 2

我怎样才能把这个linq查询的结果放到我自己的DataTable类中呢?

代码语言:javascript
复制
public class MyDataTable : DataTable
{
    public MyDataTable()
    {
        this.Columns.Add("ColumnName1");
        this.Columns.Add("ColumnName2");
        this.Columns.Add("ColumnName3");
        this.Columns.Add("ColumnName4");
    }
}

我的linq查询:

代码语言:javascript
复制
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

代码语言:javascript
复制
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中,但在这里我得到了“嵌入的语句不能是声明或标记的语句”

代码语言:javascript
复制
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);

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2020-12-10 15:15:33

我去掉了定制类,只对两个数据表使用了本机DataTable类。这似乎起到了作用。

代码语言:javascript
复制
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();
票数 0
EN

Stack Overflow用户

发布于 2020-12-10 00:19:01

DataTable不是从IEnumerable继承的:

https://docs.microsoft.com/en-us/dotnet/api/system.data.datatable.select

最好是创建一个继承自IEnumerable的自定义类,并创建使用DataTable轻松插入数据的方法。

下面是手动读取数据的方法:

代码语言:javascript
复制
// 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类对象,我可以给出更好的示例,但这需要大量的代码。如果你需要的话,请告诉我。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65220142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档