无法从“string”转换为“System.Data.DataColumn[]
{
DataTable dsIIS = new DataTable();
DataTable dsSwt = new DataTable();
dsIIS = it.IISMatch();
dsSwt = vt.SwtMatch();
DataTable dsIISSwt = new DataTable();
dsIISSwt = Join(dsIIS, dsSwt,"id","visistorId");
}
----------------------------------------
public DataTable Join(DataTable First, DataTable Second, DataColumn[] FJC, DataColumn[] SJC)
{
//创建一个新的DataTable
DataTable table = new DataTable("Join");
// Use a DataSet to leverage DataRelation
using (DataSet ds = new DataSet())
{
//把DataTable Copy到DataSet中
ds.Tables.AddRange(new DataTable[] { First.Copy(), Second.Copy() });
DataColumn[] parentcolumns = new DataColumn[FJC.Length];
for (int i = 0; i < parentcolumns.Length; i++)
{
parentcolumns[i] = ds.Tables[0].Columns[FJC[i].ColumnName];
}
DataColumn[] childcolumns = new DataColumn[SJC.Length];
for (int i = 0; i < childcolumns.Length; i++)
{
childcolumns[i] = ds.Tables[1].Columns[SJC[i].ColumnName];
}
//创建关联
DataRelation r = new DataRelation(string.Empty, parentcolumns, childcolumns, false);
ds.Relations.Add(r);
//为关联表创建列
for (int i = 0; i < First.Columns.Count; i++)
{
table.Columns.Add(First.Columns[i].ColumnName, First.Columns[i].DataType);
}
for (int i = 0; i < Second.Columns.Count; i++)
{
//看看有没有重复的列,如果有在第二个DataTable的Column的列明后加_Second
if (!table.Columns.Contains(Second.Columns[i].ColumnName))
table.Columns.Add(Second.Columns[i].ColumnName, Second.Columns[i].DataType);
else
table.Columns.Add(Second.Columns[i].ColumnName + "_Second", Second.Columns[i].DataType);
}
table.BeginLoadData();
foreach (DataRow firstrow in ds.Tables[0].Rows)
{
//得到行的数据
DataRow[] childrows = firstrow.GetChildRows(r);
if (childrows != null && childrows.Length > 0)
{
object[] parentarray = firstrow.ItemArray;
foreach (DataRow secondrow in childrows)
{
object[] secondarray = secondrow.ItemArray;
object[] joinarray = new object[parentarray.Length + secondarray.Length];
Array.Copy(parentarray, 0, joinarray, 0, parentarray.Length);
Array.Copy(secondarray, 0, joinarray, parentarray.Length, secondarray.Length);
table.LoadDataRow(joinarray, true);
}
}
}
table.EndLoadData();
}
return table;
}
这是代码,我想要实现的是两个DataTable的联合查询,但是怎么调用啊,我新手,很多不懂!
相关推荐
BarTender具名数据源实战:从创建到程序化调用的完整流程
本文详细介绍了BarTender具名数据源的创建与程序化调用流程,涵盖基础概念、设计器操作、模板对象绑定及C#调用实战。通过具名数据源,用户可实现数据一致性、维护便捷和编程友好性,显著提升标签打印效率。特别适合需要批量处理和高精度打印的场景。
C# ExcelHelper实战:DataTable与NPOI实现Excel导入导出与批量处理
在企业级开发和上位机系统中,Excel与数据表格的交互是高频需求。C#开发者常将DataTable视为内存中的二维表,而Excel则包含工作表、样式、格式等复杂状态,两者间的映射转换正是Excel操作的核心原理。借助NPOI这一免费开源库,无需安装Office即可完成读写,实现DataTable与Excel的无缝转换。掌握单元格类型处理、日期格式、列宽冻结等细节,可有效规避科学计数法、文件损坏等常见问题。围绕ExcelHelper的封装,不仅支持常规导出与读取,还能结合扫码枪输入、剪切板粘贴等场景实现快速数
C#读取Excel实战:EPPlus使用教程与常见坑
Excel文件处理是业务开发中的常见需求,而C#中读取Excel存在多种技术选型。传统COM组件方式依赖Office环境且易引发进程崩溃,NPOI虽功能全面但API偏底层。EPPlus作为纯托管库,无需安装Office即可操作.xlsx文件,提供接近Excel使用习惯的高层API,并支持公式缓存、合并单元格、样式等复杂特性。借助EPPlus,开发者可以高效地将工作表数据转换为DataTable,为业务逻辑提供规范的数据源。实际工程中,类型转换、空值判断、合并单元格取值、公式缓存等细节常常成为隐性问题,需要系
C# NPOI操作Excel实战:从DataTable读写到大数据量导出优化
在C#开发中操作Excel,常需要一种轻量且稳定的方案。NPOI作为纯托管库,无需安装Office,即可完成xls/xlsx格式的读写,并能将DataTable或DataSet直接映射为Excel工作表。借助IWorkbook对象模型和WorkbookFactory,可以实现灵活的Excel导入导出功能。对于大数据量报表导出,SXSSFWorkbook通过流式写入显著降低内存消耗,避免OOM异常。围绕ExcelHelper实践,梳理NPOI的核心用法、类型转换及性能优化策略,为C#项目中的Excel处理提供
基于springboot+vue的摄影作品社区(项目源码)
基于springboot+vue的摄影作品社区(项目源码) 系统采用前后端分离的 B/S 架构。后端基于 Spring Boot 2.7.2 与 Java 1.8 构建,以 MyBatis-Plus 完成数据访问、PageHelper 实现分页,用 MySQL 8 存储业务数据;身份认证采用 Sa-Token 轻量级框架并整合 JWT 令牌,配合 Redis 实现图形验证码缓存与会话存储;前端使用 Vue 3 与 Naive UI 构建界面,由 Vite 完成构建,看板统计图表基于 ECharts 渲染。系统面向普通用户与管理员两类角色:用户端提供注册登录、作品上传与归档、多条件检索浏览、作品集管理、分类与标签管理、摄影圈专题、回收站、个人设置与公告查看等功能;管理端提供数据看板、用户管理与公告管理等功能。


