DarioSantarelli.Blog("UgiDotNet");

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

My Links

News


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

logo linkedIn logo Twitter logo FaceBook logo RSS logo Email

Logo DotNetMarche
Logo XPUG Marche



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 2.08 |

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 1 and 5 and type the answer here:

Powered by: