使用linq机制 实现datatable连表查询 结果赋值到一个新的datatable

63 篇文章 0 订阅
30 篇文章 0 订阅

 

using System.Data;
using System.Linq;

//注意项目要引用System.Data.DataSetExtensions

 

DataTable dtA = new DataTable();
dtA.Columns.Add("id", typeof(int));
dtA.Columns.Add("price", typeof(string));
dtA.Rows.Add(1, "111");
dtA.Rows.Add(2, "222");
dtA.Rows.Add(3, "333");
dtA.Rows.Add(4, "444");
dtA.Rows.Add(5, "555");

DataTable dtB = dtA.Clone();
dtB.Rows.Add(1, "121");
dtB.Rows.Add(2, "221");
dtB.Rows.Add(3, "331");

DataTable dtC = dtA.Clone();
dtC.Columns.Add("price_excel");

var query = from a in dtA.AsEnumerable()
join b in dtB.AsEnumerable()
on a.Field<int>("id") equals b.Field<int>("id") into g
from b in g.DefaultIfEmpty()
select new
{
id = a.Field<int>("id"),
price = a.Field<string>("price"),
price_excel = b == null ? "None" : b.Field<string>("price")
};

query.ToList().ForEach(q => dtC.Rows.Add(q.id, q.price, q.price_excel));

 

### 回答1: 当您使用DataTable来绑定数据源时,可以使用以下代码按列名对数据进行排序: ```csharp dataTable.DefaultView.Sort = "列名 ASC|DESC"; dataTable = dataTable.DefaultView.ToTable(); ``` 其中,`ASC`表示按升序排列,`DESC`表示按降序排列,列名需要替换成您的实际列名。这段代码会将排序后的结果存储在DataTable中,您可以将其用于数据绑定或其他操作。 ### 回答2: 要对datatable的列名进行排序,可以使用以下步骤: 1. 首先,获datatable的列名集合,可以通过Columns属性获。 2. 将列名集合转换为List类型,可以使用LINQ查询语句将列名集合转换为List<string>类型。 3. 对列名进行排序,可以使用List的Sort方法,并指定排序方式。 4. 将排序后的列名重赋值datatable的列名集合,可以通过重创建一个的DataColumn对象列表,并将其赋值datatable的Columns属性。 以下是示例代码: DataTable dataTable = new DataTable(); // 创建一个datatable对象 // 添加几个列 dataTable.Columns.Add("B"); dataTable.Columns.Add("A"); dataTable.Columns.Add("C"); List<string> columnNames = dataTable.Columns.Cast<DataColumn>().Select(column => column.ColumnName).ToList(); // 将列名集合转换为List类型 columnNames.Sort(); // 对列名进行排序 dataTable.Columns.Clear(); // 清空datatable原有的列 foreach (string columnName in columnNames) // 遍历排序后的列名集合 { dataTable.Columns.Add(columnName); // 重添加列 } 现在,datatable的列名已按升序排序。注意,这个排序是基于列名的字母顺序,而不是基于列的位置。 希望这个回答对您有帮助! ### 回答3: 在DataTable中,列名的排序可以通过以下方式实现: 1. 使用DataTable的Columns属性获列集合,然后对列名进行排序。可以通过遍历列集合,将列名存储到一个List集合中,然后使用List的Sort方法对列名进行排序。排序完成后,可以通过List的索引访问已排序的列名,再使用DataTable的Columns.Add方法重添加列,从而实现列名的排序。 例如: ```csharp DataTable dataTable = new DataTable(); // 添加几列 dataTable.Columns.Add("B"); dataTable.Columns.Add("A"); dataTable.Columns.Add("C"); List<string> sortedColumnNames = new List<string>(); foreach(DataColumn column in dataTable.Columns) { sortedColumnNames.Add(column.ColumnName); } sortedColumnNames.Sort(); dataTable.Columns.Clear(); foreach(string columnName in sortedColumnNames) { dataTable.Columns.Add(columnName); } ``` 2. 使用LinqDataTable的列名进行排序。可以通过对DataTable的Columns属性使用Linq的OrderBy方法对列名进行排序,并将排序后的列名重创建为DataTable。 例如: ```csharp DataTable dataTable = new DataTable(); // 添加几列 dataTable.Columns.Add("B"); dataTable.Columns.Add("A"); dataTable.Columns.Add("C"); DataTable sortedDataTable = new DataTable(); sortedDataTable = dataTable.Clone(); var sortedColumns = dataTable.Columns.Cast<DataColumn>().OrderBy(c => c.ColumnName); foreach (var column in sortedColumns) { sortedDataTable.Columns.Add(column.ColumnName, column.DataType); } ``` 无论哪种方法,都可以实现DataTable列名的排序。根据具体情况选择合适的方式操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值