LINQ查询复制到DataTable

3

我有一个 Linq 查询,正在计算特定数据。现在我想将该查询强制转换为 DataTable。这是查询:

var query = dt.AsEnumerable()
    .GroupBy(row => new
    {
        Name = row.Field<string>("Name")
    })
    .Select(g => new
    {
        Name = g.Key.wcName,
        quantity = g.Count()
    });

我听说过这里使用了.CopyToDataTable,但它并没有显示出来。我该如何将查询转换为datatable?


为什么要使用dt.AsEnumerable().GroupBy()而不是仅使用dt.GroupBy()? - Dennis C
1
请参考以下链接:https://dev59.com/5G855IYBdhLWcg3wPBpx - captainsac
不,它会出现错误:“'System.Data.DataTable'不包含名为'GroupBy'的定义,也找不到接受类型为'System.Data.DataTable'的第一个参数的'GroupBy'扩展方法”。 - Harshit
2个回答

3

首先使用模式创建表格,然后使用 IEnumerable<DataRow> 结果进行选择,以便使用 CopyToDataTable() 方法。

var temp = new DataTable();
temp.Columns.Add("Name", typeof(string));
temp.Columns.Add("Quantity", typeof(int));

var query = dt.AsEnumerable()
    .GroupBy(row => row.Field<string>("Name"))
    .Select(g =>
    {
        var row = temp.NewRow();
        row.SetField("Name", g.Key);
        row.SetField("Quantity", g.Count());
        return row;
    }).CopyToDataTable();

创建的新 DataTable 是空的。没有数据插入到 temp 中。 - Harshit
row.SetField("Quantity", g.Count());后面添加temp.Rows.Add(row);就可以运行。 - Harshit
@bogojane жҠұжӯүпјҢжҲ‘д№ҹеә”иҜҘзј–иҫ‘queryзҡ„еҗҚз§°гҖӮеҸҳйҮҸqueryе·Із»ҸжҳҜDataTableзҡ„з»“жһңдәҶпјҢиҖҢдёҚжҳҜtempгҖӮ - Eric

0
public static class DataTableToListHelper
    {      
    public static List<T> DataTableToList<T>(this DataTable table) where T : class, new()
    {
        try
        {
            List<T> list = new List<T>();

            foreach (var row in table.AsEnumerable())
            {
                T obj = new T();

                foreach (var prop in obj.GetType().GetProperties())
                {
                    try
                    {
                        PropertyInfo propertyInfo = obj.GetType().GetProperty(prop.Name);
                        propertyInfo.SetValue(obj, Convert.ChangeType(row[prop.Name], propertyInfo.PropertyType), null);
                    }
                    catch
                    {
                        continue;
                    }
                }

                list.Add(obj);
            }

            return list;
        }
        catch (Exception ex)
        {                
            return null;
        }
    }
}
DataTable dt = new DataTable();
connection.Open();
adapter.Fill(dt);
connection.Close();
var entityObjectList = dt.DataTableToList<YOURENTITY>();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接