
Originariamente inviata da
pietro09
Ma tu ti trovi bene? o meglio, ritieni che abbiano prestazioni migliori rispetto ai vecchi metodi?
Una cosa per esempio, che non ho mai capito, è che le istruzioni linq (se sbaglio corregetemi) debbono essere cablate nel codice. Non so se sia possibile comporre una stringa linq e farla interpretare dal programma
Per esempio, è possibile prelevare dei dati (ordine del milione, circa) da una tabella in "verticale" e restituirli in "orizzontale"? o creare delle tabelle pivot?
No, con Linq To SQL non mi trovo (ancora) bene, e' troppo "astratto" e lo reputo solo una cosa in piu', e poi se devo cambiare un campo devo ri-deployare l'applicazione.
Credo che cio' che chiedi (la prima domanda sull'usare una stringa) non sia possibile: quando metti in una variabile il risultato della query Linq (variabile che poi diventa un oggetto che implementa IEnumerable), le istruzioni sono classi credo, rese disponibili dal namespace System.Linq.
Per manipolarli poi come vuoi credo di si, basta un po' di ingegno.
Ho fatto questa pagina di esempio per Linq To Objects, prova a giocarci:
ASPX
codice:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="LINQ_Default2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Esempi Linq</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div style="background-color: Yellow; font-family: @Batang; font-size: medium; border: 1px solid;
margin: auto;">
<center>Esempi LINQ</center>
</div>
<br />
Con Array di stringhe:
<asp:Label ID="lb" runat="server"></asp:Label>
<br />
<br />
Con List<> (filtrato per 'michael'):
<asp:GridView AutoGenerateColumns="false" ID="gv" runat="server" BackColor="White"
BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" CellPadding="4">
<FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
<PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
<RowStyle BackColor="White" ForeColor="#330099" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
<SortedAscendingCellStyle BackColor="#FEFCEB" />
<SortedAscendingHeaderStyle BackColor="#AF0101" />
<SortedDescendingCellStyle BackColor="#F6F0C0" />
<SortedDescendingHeaderStyle BackColor="#7E0000" />
<Columns>
<asp:BoundField DataField="id" HeaderText="ID" />
<asp:BoundField DataField="regista" HeaderText="Regista" />
<asp:BoundField DataField="titolo" HeaderText="Titolo" />
</Columns>
</asp:GridView>
<br />
<br />
Con DataTable (filtrato per 'roberto'):
<asp:GridView AutoGenerateColumns="false" ID="gv2" runat="server" BackColor="White"
BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" CellPadding="4">
<FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
<PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
<RowStyle BackColor="White" ForeColor="#330099" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
<SortedAscendingCellStyle BackColor="#FEFCEB" />
<SortedAscendingHeaderStyle BackColor="#AF0101" />
<SortedDescendingCellStyle BackColor="#F6F0C0" />
<SortedDescendingHeaderStyle BackColor="#7E0000" />
<Columns>
<asp:BoundField DataField="id" HeaderText="ID" />
<asp:BoundField DataField="regista" HeaderText="Regista" />
<asp:BoundField DataField="titolo" HeaderText="Titolo" />
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
C#
codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public class film
{
public int id;
public string titolo;
public string regista;
}
public partial class LINQ_Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
conArrayStringa(); // SENZA Linq To Objects
conList();
conDataTable();
}
// SENZA Linq To Objects
public void conArrayStringa()
{
string[] nomi = { "Peppe", "Andrea", "Paolo", "Patrizia", "Zaza" };
List<string> nomiCheInizianoConLaP = new List<string>();
foreach (string s in nomi)
if (s.StartsWith("P")) nomiCheInizianoConLaP.Add(s);
nomiCheInizianoConLaP.Sort();
foreach (string s in nomi)
if (s.StartsWith("P")) lb.Text += "<li>" + s;
}
// Linq To Objects
public void conList()
{
List<film> collezioneDiFilms = new List<film>();
collezioneDiFilms.Add(new film { id = 0, regista = "roberto benigni", titolo = "la vita è bella" });
collezioneDiFilms.Add(new film { id = 1, regista = "paolo sorrentino", titolo = "la grande bellezza" });
collezioneDiFilms.Add(new film { id = 2, regista = "michael moore", titolo = "farenheit 9/11" });
collezioneDiFilms.Add(new film { id = 3, regista = "michael jackson", titolo = "moonwalker" });
var ris = from FILM in collezioneDiFilms
where FILM.regista.Contains("michael")
select new { FILM.id, FILM.regista, FILM.titolo };
gv.DataSource = ris;
gv.DataBind();
}
// Linq To Objects
public void conDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(Int32));
dt.Columns[0].AllowDBNull = false; // id
dt.Columns[0].Unique = true; // id
dt.Columns.Add("regista", typeof(string)); // regista
dt.Columns.Add("titolo", typeof(string)); // titolo
DataRow riga1 = dt.NewRow();
riga1["id"] = 0;
riga1["regista"] = "roberto benigni";
riga1["titolo"] = "la vita è bella";
dt.Rows.Add(riga1);
DataRow riga2 = dt.NewRow();
riga2["id"] = 1;
riga2["regista"] = "george lucas";
riga2["titolo"] = "star wars";
dt.Rows.Add(riga2);
DataRow riga3 = dt.NewRow();
riga3["id"] = 2;
riga3["regista"] = "roberto rossellini";
riga3["titolo"] = "viaggio in italia";
dt.Rows.Add(riga3);
var ris = from filmRisultato in dt.AsEnumerable()
where filmRisultato.Field<string>("regista").Contains("roberto")
select new
{
id = filmRisultato.Field<int>("id"),
regista = filmRisultato.Field<string>("regista"),
titolo = filmRisultato.Field<string>("titolo"),
};
gv2.DataSource = ris;
gv2.DataBind();
}
}