【问题标题】:Inserting a row after specific value - C#在特定值之后插入一行 - C#
【发布时间】:2016-12-18 16:32:00
【问题描述】:

我有一个查询,它提供超过 500 行,我根据特定列(例如名称)对它们进行了排序,并且我正在将结果写入文本文件中。 我想在每组的最后一行之后添加一个中断记录。 比如我的查询结果是:

Name Address City State Zip   Phone   Break
AAA  BBB     CCC   SS   1234  555     
AAA  DDD     EEE   SS   1234  666
MMM  YYY     ZZZ   EE   4457  999
LLL  DDD     ooo   WW   7895  777

但我想添加一个额外的行并在文本文件中添加“是”作为中断值:

Name Address City State Zip   Phone   Break
AAA  BBB     CCC   SS   1234  555     
AAA  DDD     EEE   SS   1234  666
                                       YES
MMM  YYY     ZZZ   EE   4457  999
                                       YES
LLL  DDD     ooo   WW   7895  777
                                       YES

我的代码是:

string query = " select * from table order by name";
SqlDataReader reader;
string connStr = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
string strDelimiter = "\t";
string strDel = "\"";
string strFilePath = @"C:\" TextFile_" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
StringBuilder sb = new StringBuilder();

using (SqlConnection conn = new SqlConnection(connStr))
{
    conn.Open();
    using (reader = new SqlCommand(query, conn).ExecuteReader())
    {

        for (int i = 0; i < reader.FieldCount; i++)
        {
            sb.Append(strDel);
            sb.Append(reader.GetName(i));
            sb.Append(strDel);
            if (i == reader.FieldCount - 1)
            {
                continue;
            }
            sb.Append(strDelimiter);
        }
        sb.Append(Environment.NewLine);
        if (reader.HasRows)
        {
            Object[] items = new Object[reader.FieldCount];

            while (reader.Read())
            {
                reader.GetValues(items);
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    sb.Append(strDel);
                    sb.Append(reader.GetValue(i).ToString());
                    sb.Append(strDel);
                    if (i == reader.FieldCount - 1)
                    {
                        continue;
                    }
                    sb.Append(strDelimiter);
                }
                sb.Append(Environment.NewLine);

            }
        }
    }
    conn.Close();
    File.WriteAllText(strFilePath, sb.ToString());
}

【问题讨论】:

  • 分享你的代码到现在
  • 我用代码更新了问题,但这只是给了我所有的数据,我想不出在每个组之后添加换行符的方法

标签: c# sql text reader


【解决方案1】:
var breakLine = new List<YourType> { new YourType { Break = "Yes"}};

var result = collection.GroupBy(item => item.Name)
                       .SelectMany(grouping => grouping.Union(breakLine))
                       .ToList();

【讨论】:

  • 是的,然后在每个组中进行 foreach 并运行上面的现有代码。
  • @UmmEHabibaSiddiqui - 我会说获取数据(数据库部分)并将其操作到文件的单独逻辑。因此,在您带来数据后对其进行这些操作并放入文件
  • 您可以启动 here 来查看如何将阅读器的输出转换为类,然后查看 linq 以了解如何执行我上面写的操作。最终输出到文件中。现在,这远非必须,您也可以通过其他方式做到这一点,但这只是我在阅读问题时首先想到的,在代码示例之前
猜你喜欢
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
相关资源
最近更新 更多