如何重新排列列表索引
How can I rearrange list indexing
我正在处理 google 点差sheet,用户连接其点差sheet,系统在日终将数据推送到用户连接的点差sheet。
这里有 spreadsheet 列
列的顺序是
"PatientName","DOB","StripeId","Card","ChargeCreated","Status","Amount"
这里是使用的代码
var GoogleSpreadSheetData = db.GoogleSpreadSheetDatas
.ToList()
.Select(x => new List<string>{
x.PatientName.Trim(),
x.DOB.Trim(),
x.StripeId.Trim(),
x.Card.Trim(),
x.ChargeCreated.Trim(),
x.Status.Trim(),
x.Amount.Trim(),
})
.ToList();
google 传播 sheet 列和查询 return 的序列是相同的序列
"PatientName","DOB","StripeId","Card","ChargeCreated","Status","Amount"
并且数据将映射到 spread sheet Reference image.
中的确切列
如果用户像这样更改列的顺序 image,将 PatientName
列替换为 DOB
。下次数据推送到 spreadsheet 时 PatientName
数据被推送到 DOB
列,反之亦然。
在将数据推送到传播之前sheet,首先我调用google API(使用开发者元数据)来获取传播的序列sheet,我得到响应中更新的列序列。
My question is
如何更改查询 select 的顺序?
我可以在查询 select 或之后重新排列列表吗?
请帮忙解决这个问题。
谢谢。
假设您的元数据查询为您提供了 List<string>
个列名:
List<string> spreadsheetColSeq;
然后您可以查询数据库以检索行:
var dbData = db.GoogleSpreadSheetDatas
.Select(x => new List<string> {
x.PatientName.Trim(),
x.DOB.Trim(),
x.StripeId.Trim(),
x.Card.Trim(),
x.ChargeCreated.Trim(),
x.Status.Trim(),
x.Amount.Trim(),
})
.ToList();
然后您可以创建从查询顺序到电子表格顺序的映射,并对每一行的 List<string>
重新排序以匹配新顺序:
var origSeq = new[] { "PatientName", "DOB", "StripeId", "Card", "ChargeCreated", "Status", "Amount" };
var colOrder = spreadsheetColSeq
.Select(colName => Array.IndexOf(origSeq, colName))
.ToList();
var GoogleSpreadSheetData = dbData
.Select(row => colOrder.Select(idx => row[idx]).ToList())
.ToList();
注意:如果列可能被删除,这将崩溃,因为 Array.IndexOf
将 return -1
用于缺失值。您可以通过在 ToList()
之前添加 .Where(idx => idx > -1)
来过滤 colOrder
以跳过缺失的列。
我正在处理 google 点差sheet,用户连接其点差sheet,系统在日终将数据推送到用户连接的点差sheet。
这里有 spreadsheet 列
列的顺序是
"PatientName","DOB","StripeId","Card","ChargeCreated","Status","Amount"
这里是使用的代码
var GoogleSpreadSheetData = db.GoogleSpreadSheetDatas
.ToList()
.Select(x => new List<string>{
x.PatientName.Trim(),
x.DOB.Trim(),
x.StripeId.Trim(),
x.Card.Trim(),
x.ChargeCreated.Trim(),
x.Status.Trim(),
x.Amount.Trim(),
})
.ToList();
google 传播 sheet 列和查询 return 的序列是相同的序列
"PatientName","DOB","StripeId","Card","ChargeCreated","Status","Amount"
并且数据将映射到 spread sheet Reference image.
如果用户像这样更改列的顺序 image,将 PatientName
列替换为 DOB
。下次数据推送到 spreadsheet 时 PatientName
数据被推送到 DOB
列,反之亦然。
在将数据推送到传播之前sheet,首先我调用google API(使用开发者元数据)来获取传播的序列sheet,我得到响应中更新的列序列。
My question is
如何更改查询 select 的顺序? 我可以在查询 select 或之后重新排列列表吗?
请帮忙解决这个问题。 谢谢。
假设您的元数据查询为您提供了 List<string>
个列名:
List<string> spreadsheetColSeq;
然后您可以查询数据库以检索行:
var dbData = db.GoogleSpreadSheetDatas
.Select(x => new List<string> {
x.PatientName.Trim(),
x.DOB.Trim(),
x.StripeId.Trim(),
x.Card.Trim(),
x.ChargeCreated.Trim(),
x.Status.Trim(),
x.Amount.Trim(),
})
.ToList();
然后您可以创建从查询顺序到电子表格顺序的映射,并对每一行的 List<string>
重新排序以匹配新顺序:
var origSeq = new[] { "PatientName", "DOB", "StripeId", "Card", "ChargeCreated", "Status", "Amount" };
var colOrder = spreadsheetColSeq
.Select(colName => Array.IndexOf(origSeq, colName))
.ToList();
var GoogleSpreadSheetData = dbData
.Select(row => colOrder.Select(idx => row[idx]).ToList())
.ToList();
注意:如果列可能被删除,这将崩溃,因为 Array.IndexOf
将 return -1
用于缺失值。您可以通过在 ToList()
之前添加 .Where(idx => idx > -1)
来过滤 colOrder
以跳过缺失的列。