Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 32

Discussione: Linq - opinioni

  1. #1
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887

    Linq - opinioni

    Sto iniziando ad usarlo.

    Cosa ne pensate ?
    Linq to Xml e Linq to Objects li trovo smart..
    Ma Linq to SQL che vantaggio ha ?
    Se ho necessità di cambiare una query devo rieffettuare il deploy dell'applicazione ?

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Per l'xml ho utilizzato con profitto xpath. Dato che mi sono trovato bene, non avevo voglia di cambiare.

    linq classico mi piace. Per le cose più complesse però, ho notato che bisogna essere esperti; non è proprio semplice.

    linq to sql che serve? Io uso lavorare in stretto contatto con Oracle e con l'sql classico mi trovo più che bene

    ps. non capisco cosa significhi smart. Dato che tu sei in Italia, e io in Sardegna, ho trovato questi significati:
    sveglio, aspro, di moda, brillante, elegante, intelligente, **** cosa scelgo?
    Pietro

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    "figo, nuovo, innovativo".

    parlavo di Sql Server. E' vero non è semplice, soprattutto per chi è abituato all'SQL classico.

    Linq to Sql permette di mappare le tabelle e di scrivere query in C# (detto per grandi linee)

  4. #4
    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

  5. #5
    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

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    se provi a scrivere (nella sub conList):

    codice:
    // prova stringa
    string qry = "from FILM in collezioneDiFilms where FILM.regista.Contains(\"michael\") select new { FILM.id, FILM.regista, FILM.titolo };";
    var ris = qry;

    non funziona, non estrae nulla.. (mi dice che la colonna "id" non esiste nell'origine dati)

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    funziona perfettamente
    in 3 modi, in basic

    codice:
    Dim ris = collezioneDiFilms.Select(Function(o) New With {.id = o.id, .regista = o.regista, .titolo = o.titolo}).Where(Function(o) o.regista.Contains("michael"))
    Dim ris = From film In collezioneDiFilms Where film.regista.Contains("michael") Select film.id, film.regista, film.titolo
    Dim ris = From film In collezioneDiFilms Where film.regista.Contains("michael") Select New With {.id = film.id, .regista = film.regista, .titolo = film.titolo}
    dimenticavo
    codice:
            gv.DataSource = ris
            gv.DataBind()
    Ultima modifica di pietro09; 13-01-2017 a 12:20
    Pietro

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    si ma con le classi offerte dal namespace, non in formato stringa, giusto ?

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Quote Originariamente inviata da djciko Visualizza il messaggio
    si ma con le classi offerte dal namespace, non in formato stringa, giusto ?
    puoi tradurre, per favore?
    Pietro

  10. #10
    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.