Visualizzazione dei risultati da 1 a 10 su 32

Discussione: Linq - opinioni

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    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?
    Pietro

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Quote Originariamente inviata da pietro09 Visualizza il messaggio
    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();
        }
    }
    Ultima modifica di djciko; 12-01-2017 a 13:39

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Quote Originariamente inviata da pietro09 Visualizza il messaggio
    Non so se sia possibile comporre una stringa linq e farla interpretare dal programma

    questa tua domanda significava "fare una stringa (string) e poi usarla come istruzione Linq" oppure avevo capito male io ?

    ti chiedevo se volevi usare delle stringhe (o stringbuilder) per costruire le istruzioni e poi usarle come query....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.