2016-08-11 5 views
0

У меня есть запрос, который дает более 500 строк, и я заказал их в соответствии с определенным столбцом, скажем, Имя, и я пишу результат в текстовом файле. Я хочу добавить запись перерыва после последней строки каждой группы. Например мой результат запроса:Вставка строки после определенного значения - C#

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()); 
} 
+0

Делитесь своим кодом до сих пор –

+0

Я обновил вопрос с кодом, но это только дает мне все данные, я не могу тонко k - способ добавить строку прерывания после каждой группы –

ответ

1
var breakLine = new List<YourType> { new YourType { Break = "Yes"}}; 

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

yep, затем занять внутри каждой группы и запустить существующий код выше. – Steve

+0

Как я могу использовать это в своем коде выше? –

+0

@UmmEHabibaSiddiqui - я бы сказал, раздельная логика получения данных (часть базы данных) и манипуляции с ним в файл. Итак, после того, как вы принесете данные, выполните эти операции над ним и поместите в файл –