如何重新排列列表索引

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 以跳过缺失的列。