我有一个计算特定数据的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
,但没有显示。如何将查询转换为数据表?
答案 0 :(得分:2)
首先使用架构创建一个表,然后使用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();
答案 1 :(得分:-1)
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>();