c# - 将 LINQ 连接查询转换为 DataTable
问题描述
我想将 LINQ Join 查询结果转换为我检查过但找不到任何真实解决方案的 DataTable。
我尝试了两种方法1:
var query = from A in ABC.AsEnumerable()
join X in XYZ.AsEnumerable()
on A.Field<int>("A-ID") equals
X.Field<int>("X-ID")
where ((A.Field<string>("A-Column1") == "1")
&& (r.Field<string>("X-Column1") == "1"))
select new
{
UserName = ABC.Field<string>("UserName"),
UserExperience = XYZ.Field<string>("UserExperience"),
...
};
2:
DataTable dt = new DataTable();
dt.Columns.Add("UserName", typeof(string));
dt.Columns.Add("UserExperience", typeof(string));
var query = from A in ABC.AsEnumerable()
join X in XYZ.AsEnumerable()
on A.Field<int>("A-ID") equals
X.Field<int>("X-ID")
where ((A.Field<string>("A-Column1") == "1")
&& (r.Field<string>("X-Column1") == "1"))
select dt.LoadDataRow(new object[]
{
ABC.Field<string>("UserName"),
XYZ.Field<string>("UserExperience"),
...
}, false);
DataTable ddt = new DataTable();
ddt = query.CopyToDataTable();
但这两者都无法解决我的问题。
我想将该结果转换为 DataTable / DataSet。
提前致谢。
解决方案
创建以下方法并传递您的 LINQ 查询返回的任何类型的对象。
public static DataTable CreateDataTableFromAnyCollection<T>(IEnumerable<T> list)
{
Type type = typeof(T);
var properties = type.GetProperties();
DataTable dataTable = new DataTable();
foreach (PropertyInfo info in properties)
{
dataTable.Columns.Add(new DataColumn(info.Name, Nullable.GetUnderlyingType(info.PropertyType) ?? info.PropertyType));
}
foreach (T entity in list)
{
object[] values = new object[properties.Length];
for (int i = 0; i < properties.Length; i++)
{
values[i] = properties[i].GetValue(entity,null);
}
dataTable.Rows.Add(values);
}
return dataTable;
}
并传递您的 LINQ 结果,例如
DataTable dt = CreateDataTableFromAnyCollection(list);
希望这会帮助你。
推荐阅读
- c++ - 仅传递第二个模板参数的方法
- authentication - 使用 Azure AD 进行身份验证,在最后一步访问 Skype for Business 时失败
- javascript - 覆盖形状的渲染功能
- doctrine-orm - 将实体与 OneToMany 关联持久化后,外键保持为空
- powershell - Powershell 过滤不识别变量
- mysql - 如何限制左连接中的记录
- python - 无法在 Python 中将范围插入谷歌表格
- node.js - Azure 上的 Express App 无法加载静态文件,状态 500
- xml - 为什么在 Odoo 11 中安装模块时出现错误“在字符串格式化期间没有转换所有参数”?
- python - 拟合曲线时的 TypeError