2013-03-11 197 views
0

我正在開發一些客戶端的工具,他們不想使用LINQ to SQL,他們也不想使用WPF,但我使用它,他們害怕到新的編碼或其他東西......但我不能與數據庫,因爲他們不知道任何關於LINQ ......所以他們給了我這個討厭的類(http://pastebin.com/VUzvN44i太長,粘貼在這裏,對不起)這是「好」當檢索行逐行...數據庫查詢foreach循環c#

但我有以下功能,這是完全與linq sql的功能,但我失去了他們給了我這個類...所以,如果有人可以給我一些建議如何在不修改課程的情況下做到這一點非常有幫助。謝謝。

private void GenerarFichero_Click(object sender, RoutedEventArgs e) 
{ 
    string valEmisora = "02827003"; 
    string codigoCabecera; 
    if (DateTime.Today.Day > 7) 
     codigoCabecera = "AE570200"; 
    else 
     codigoCabecera = "AE570100"; 
    DataBaseDataContext dc = new DataBaseDataContext(); 
    using (StreamWriter sw = new StreamWriter(codigoCabecera.Remove(6, 2))) 
    { 
     sw.WriteLine("775701 " + DateTime.Now.ToString("yy") + DateTime.Now.Month.ToString("d2") + DateTime.Now.AddDays(1).Day.ToString("d2") + DateTime.Now.Hour.ToString("d2") + DateTime.Now.Minute.ToString("d2") + "008910     00" + txtBanco.Text + codigoCabecera + txtBanco.Text + ""); 
     sw.WriteLine("0170  " + valEmisora + " " + this.txtBanco.Text + "   10" + DateTime.Now.ToString("MM") + DateTime.Now.ToString("yy")); 

     var OutputQuery = 
      from o in dc.Seguros 
      group o by o.emisora; 
     List<int> TotalRegistros = new List<int>(); 
     List<int> TotalSumas = new List<int>(); 
     foreach (var grupo in OutputQuery) 
     { 
      sw.WriteLine("0270  " + valEmisora + grupo.Key + " " + this.txtBanco.Text + "   10" + DateTime.Now.ToString("MM") + DateTime.Now.ToString("yy")); 
      List<int> Suma = new List<int>(); 
      foreach (var data in grupo) 
      { 
       Suma.Add(Convert.ToInt32(data.importe + data.importe_dec)); 
       sw.WriteLine("6070  " + valEmisora + data.emisora + "1" + data.banco + data.sucursal + data.fecha + data.importe + data.importe_dec + data.identificacion + "      " + data.referencia); 
      } 
      TotalRegistros.Add((grupo.Count() + 2)); 
      TotalSumas.Add(Suma.Sum()); 
      sw.WriteLine("8070  " + valEmisora + grupo.Key + " " + (grupo.Count() + 2).ToString().PadLeft(6, '0') + "  " + Suma.Sum().ToString().PadLeft(12, '0')); 
     } 
     sw.WriteLine("9070  " + valEmisora + " " + (TotalRegistros.Sum() + 2).ToString().PadLeft(6, '0') + "  " + TotalSumas.Sum().ToString().PadLeft(12, '0')); 
     this.txtTotal.Text = TotalSumas.Sum().ToString(); 
    } 
    MessageBox.Show("El fichero ha sido guardado, ya no se puede editar"); 
} 
+1

我想到的第一件事就是。你的客戶爲什麼決定使用哪種技術?是IT公司還是什麼?其次,將該代碼移至相應的DAL層。不要將DB訪問代碼放在Button單擊處理程序中。它只是爲了看到我而傷害我的眼睛。 – 2013-03-11 12:24:38

+0

其實,我正在使用他們想要的東西...不是我想要的,而是一家IT公司,它要求我按照他們的步驟製作此程序,所以我沒有自由編碼...我製作了應用程序使用Linq和東西,完全工作,但他們不希望這樣,因爲他們的程序員不知道這件事,如果他們想修改某些東西,他們不知道如何...... u_u也許解析DataTable到IENUMABLE可以幫忙嗎? =/ – 2013-03-11 12:29:20

回答

0

好了,我最終代碼的工作,我把它換成OutputQueryDataTable.AsEnumerable,實際上它是工作......這是現在的代碼如下

private void GenerarFichero_Click(object sender, RoutedEventArgs e) 
{ 
    string valEmisora = "02827003"; 
    string codigoCabecera; 
    if (DateTime.Today.Day > 7) 
     codigoCabecera = "AE570200"; 
    else 
     codigoCabecera = "AE570100"; 
    using (StreamWriter sw = new StreamWriter(codigoCabecera.Remove(6, 2))) 
    { 
     sw.WriteLine("775701 " + DateTime.Now.ToString("yy") + DateTime.Now.Month.ToString("d2") + DateTime.Now.AddDays(1).Day.ToString("d2") + DateTime.Now.Hour.ToString("d2") + DateTime.Now.Minute.ToString("d2") + "008910     00" + txtBanco.Text + codigoCabecera + txtBanco.Text + ""); 
     sw.WriteLine("0170  " + valEmisora + " " + this.txtBanco.Text + "   10" + DateTime.Now.ToString("MM") + DateTime.Now.ToString("yy")); 

     SelectBD sel = new SelectBD(App.ConexBD, "SELECT * FROM Seguros"); 
     var Query = sel.DataTable.AsEnumerable().Select(row => 
       { 
        return new  
        {  
         banco = row["banco"].ToString(), 
         emisora = row["emisora"].ToString(), 
         sucursal = row["sucursal"].ToString(), 
         fecha = row["fecha"].ToString(), 
         identificacion = row["identificacion"].ToString(), 
         importe = row["importe"].ToString(), 
         importe_dec = row["importe_dec"].ToString(), 
         provincia = row["provincia"].ToString(), 
         referencia = row["referencia"].ToString(), 
        }; 
       }); 
     var OutputQuery = Query.GroupBy(l => l.emisora); 
     List<int> TotalRegistros = new List<int>(); 
     List<int> TotalSumas = new List<int>(); 
     foreach (var grupo in OutputQuery) 
     { 
      sw.WriteLine("0270  " + valEmisora + grupo.Key + " " + this.txtBanco.Text + "   10" + DateTime.Now.ToString("MM") + DateTime.Now.ToString("yy")); 
      List<int> Suma = new List<int>(); 
      foreach (var data in grupo) 
      { 
       Suma.Add(Convert.ToInt32(data.importe + data.importe_dec)); 
       sw.WriteLine("6070  " + valEmisora + data.emisora + "1" + data.banco + data.sucursal + data.fecha + data.importe + data.importe_dec + data.identificacion + "      " + data.referencia); 
      } 
      TotalRegistros.Add((grupo.Count() + 2)); 
      TotalSumas.Add(Suma.Sum()); 
      sw.WriteLine("8070  " + valEmisora + grupo.Key + " " + (grupo.Count() + 2).ToString().PadLeft(6, '0') + "  " + Suma.Sum().ToString().PadLeft(12, '0')); 
     } 
     sw.WriteLine("9070  " + valEmisora + " " + (TotalRegistros.Sum() + 2).ToString().PadLeft(6, '0') + "  " + TotalSumas.Sum().ToString().PadLeft(12, '0')); 
     this.txtTotal.Text = TotalSumas.Sum().ToString(); 
    } 
    MessageBox.Show("El fichero ha sido guardado, ya no se puede editar"); 
} 
+0

所以你決定使用LINQ to DataSets可以嗎?我想你的客戶必須在某個時候進入LINQ世界。請確保將你喜歡的答案標記爲你的問題的答案。 – 2013-03-11 13:33:06

+0

是的,因爲他們仍然可以使用他們的類,這個小小的調整可以工作...所以每個人都贏了(不是我,醜陋的代碼)我告訴他們轉移到LINQ,但他們拒絕任何東西-_- – 2013-03-11 13:45:40

1

我不感到自豪我會說,但既然你迫切需要在這裏解決它去...... 與此有關的工作快速和骯髒的方法是:

var connection = InitalizeConnectionToDb(); 
var select = new SelectBD(); 
// Get the data from database 
select.Open(connection, @"select * from Seguros"); 
// Simulate the grouping 
var dictionary = new Dictionary<string, List<DataRow>>(); 
foreach(var row in select.DataTable) 
{ 
    var key = Convert.ToString(row["emisora"]); 
    if(!dictionary.ContainsKey(key)) 
    { 
     dictionary[key] = new List<DataRow>(); 
    } 
    dictionary[key].Add(row); 
} 

現在,您可以使用上面的字典來執行計算,因爲數據按emisora字段分組。

+1

感謝您的評論,但我得到它的工作(請參閱我自己的答案)我認爲這是最好的解決方案。 – 2013-03-11 12:39:23