【问题标题】:How can I rearrange list indexing如何重新排列列表索引
【发布时间】:2021-12-24 02:43:28
【问题描述】:

我正在处理谷歌电子表格,用户连接其电子表格,系统在一天结束时将数据推送到用户连接的电子表格。 这是电子表格列 列的顺序是 "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();

谷歌电子表格列的顺序和查询返回的顺序相同 "PatientName","DOB","StripeId","Card","ChargeCreated","Status","Amount" 并且数据将映射到电子表格Reference image 中的确切列。

如果用户像image 这样更改列的顺序,则将PatientName 列替换为DOB。当下次数据推送到电子表格时,PatientName 数据被推送到 DOB 列中,反之亦然。

在将数据推送到电子表格之前,首先我调用 google API(使用开发人员元数据)来获取该电子表格的序列,我得到了更新的列序列作为响应。

My question is

如何更改查询选择的顺序? 我可以在查询选择或之后重新排列列表吗?

请帮助解决这个问题。 谢谢。

【问题讨论】:

  • 我们现在已经在这里讨论过了:stackoverflow.com/questions/69930298/…
  • 您的问题需要详细说明,您使用哪种API方法?您如何为 API 准备数据?
  • 我认为您在数据库查询中不应该需要您的第一个 ToList()

标签: c# entity-framework linq


【解决方案1】:

假设您的元数据查询为您提供了 List&lt;string&gt; 的列名:

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&lt;string&gt; 重新排序以匹配新顺序:

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 将返回 -1 以获取缺失值。您可以通过在ToList() 之前添加.Where(idx =&gt; idx &gt; -1) 来过滤colOrder 以跳过缺失的列。

【讨论】:

    猜你喜欢
    • 2018-04-15
    • 2017-05-23
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2017-04-08
    • 2021-05-12
    • 1970-01-01
    • 2019-03-26
    相关资源
    最近更新 更多