DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 105, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.




Tag Cloud

Archives

Post Categories

My English Blog

[LINQ To DataSet] Interrogare tabelle Excel

Uno degli scenari in cui risulta spesso comod(issim)o ricorrere a LINQ to DataSet è l'elaborazione di dati in formato tabellare provenienti da datasheet Excel 97-2003 (.xls).
Supponiamo di voler processare, tramite il nostro applicativo, un datasheet come il seguente:

 

Alternativamente ai soliti statement di interrogazione dei DataSet, ora possiamo utilizzare LINQ to DataSet per accedere ai dati in maniera molto più potente ed espressiva, magari per effettuare operazioni complesse (magari difficilmente riproducibili con ADO.NET 2.0) o semplicemente per rendere il nostro codice maggiormente leggibile/manutenibile. A riguardo, riporto un semplice esempio di come poter sfruttare LINQ to DataSet in scenari come questo: 
 

string filename = @"C:\Sample.xls";
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filename + ";" + "Extended Properties=Excel 8.0;";
OleDbDataAdapter dataAdapter = new OleDbDataAdapter("SELECT * FROM [SampleData$]", connectionString);
DataTable dataTable_products = new DataTable("Products");
dataAdapter.Fill(dataTable_products);          

// Es. 1: Calcolo spese totali per prodotto
var grouped_products = from row in dataTable_products.AsEnumerable()
                       group row by new { ProductName = row.Field<string>("ProductName") }                                   
                       into productGroup                                  
                      
select new {
                                   
ProductName = productGroup.Key.ProductName,
                                   
TotalCost = productGroup.Sum(row => (double)row.Field<decimal>("UnitPrice") * row.Field<double>("Qty"))
                                 
};                                   

foreach (var product in grouped_products)
{
 
Console.Write("{0} ", product.ProductName);
 
Console.WriteLine(product.TotalCost.ToString("C"));               
}

// Es. 2: Calcolo spese totali
double total = dataTable_products.AsEnumerable().Sum(row => (double)row.Field<decimal>("UnitPrice") * row.Field<double>("Qty"));
Console.WriteLine("Total: {0}", total.ToString("C"));


Facile, rapido, LEGGIBILE... Grazie LINQ!!!

N.B.: Ovviamente il funzionamento dell'esempio riportato presuppone che la prima riga del datasheet contenga i nomi delle colonne.

Technorati Tag: ,,

Print | posted on sabato 6 settembre 2008 05:08 |

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET