234 messaggi dal 25 gennaio 2002
Salve ragazzi ho visto vari scripts ma non riesco a superare l'ultimo scoglio...vi spiego.

Ho questa semplice classe

public class EmailCompanyContact
    {
        public int contactID { get; set; }
        public int CompanyID { get; set; }
        public string contactName { get; set; }
        public string contactEmail { get; set; }
    }


successivamente mi creo la mia list

List<EmailCompanyContact> lEmailCompanyContact = new List<EmailCompanyContact>();


e quindi aggiungo gli elementi.

Spesso e volentieri mi ritrovo nella lista dei records doppi percui ho pensato di utilizzare linq per fare una group by sul campo "contactID" ed ho scritto questa riga di codice:

var EmailCompanyContact = from p in lEmailCompanyContact where p.CompanyID == Convert.ToInt32(gvCompany.SelectedDataKey["CompanyID"]) group p by p.contactID into g select new { g.Key, g};

gvContacts.DataSource = EmailCompanyContact;
gvContacts.DataBind();


gvContacts (GridView)

Il tutto funziona in parte, perche' mi ritrovo si il numero di record giusti ma non riesco a recuperare (quindi visualizzare nella gridview) gli altri due campi che mi servono "contactName" e "contactEmail".
Cosa devo modificare nella sintassi linq?

Grazie mille.

Aikon

...questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!
già guardato quà:

http://www.linqitalia.com/script/18/Scrolling-Silverlight-2.0.aspx


ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
234 messaggi dal 25 gennaio 2002
nostromo ha scritto:
già guardato quà:

http://www.linqitalia.com/script/18/Scrolling-Silverlight-2.0.aspx


ciao marco



Ciao Marco e grazie per la risposta; cmq ho provato in questo modo

var q = lEmailCompanyContact.GroupBy(pe => pe.contactID, pe => pe).AsQueryable();

gvContacts.DataSource = q;
gvContacts.DataBind();


ma mi solleva un'eccezione: non riesce a trovare un campo di nome contactName nel datasource associato alla gridview

.....
<Columns>
                                
                                <asp:BoundField DataField="contactName" HeaderText="Contact Name" SortExpression="contactName">
                                    <HeaderStyle HorizontalAlign="Left" />
                                </asp:BoundField>
                                <asp:BoundField DataField="contactEmail" HeaderText="Contact Email" SortExpression="contactEmail">
                                    <HeaderStyle HorizontalAlign="Left" />
                                </asp:BoundField>
                            </Columns>


cosa mi consigli?

Aikon

...questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!
è un pezzetto che non facevo query così complesse ho perso la mano

sono arrivato a questo:

System.Collections.Generic.List<Persona> persone = new System.Collections.Generic.List<Persona>
        {
            new Persona { Nome = "Stefano", Cognome = "Mostarda", Eta = 28, Citta="Roma", DataNascita=new DateTime(1979, 04, 11), Indirizzo="Via " },
            new Persona { Nome = "Daniele", Cognome = "Bochicchio", Eta = 28, Citta = "Vulture", DataNascita = new DateTime(1979, 10, 20), Indirizzo = "Via "},
            new Persona { Nome = "Riccardo", Cognome = "Golia", Eta = 35, Citta = "Padova", DataNascita = new DateTime(1974, 10, 20), Indirizzo = "Via " },
            new Persona { Nome = "Cristian", Cognome = "Civera", Eta = 25, Citta = "Brescia", DataNascita = new DateTime(1981, 10, 20), Indirizzo = "Via " },
            new Persona { Nome = "Marco", Cognome = "Leoncini", Eta = 35, Citta = "Empoli", DataNascita = new DateTime(1975, 9, 1), Indirizzo = "Via " }
        };

        var gruppiEta = from p in persone
                     group p by p.Eta into g
                     select new { Eta = g.Key, Item = g.ToList() };

        var joinPersone = from gruppo in gruppiEta
                          join p in persone on gruppo.Eta equals p.Eta into gruppo2
                          from item in gruppo2.DefaultIfEmpty(new Persona())
                          select new { Eta = gruppo.Eta, Indirizzo = item.Indirizzo, Nome = item.Nome };





        GridView1.DataSource = joinPersone;
        GridView1.DataBind();


lavorandoci sonoconvinto si può ottimizzare e rendere i risultati migliori

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
234 messaggi dal 25 gennaio 2002
Ho provato in questo modo

var listCompanyContact = from p in lEmailCompanyContact
                                         group p by p.contactID into g
                                         select new { contactID = g.Key, Item = g.ToList() };

                var joinList = from contact in listCompanyContact
                               join p in lEmailCompanyContact on contact.contactID equals p.contactID into contact2
                               from item in contact2.DefaultIfEmpty(new EmailCompanyContact())
                               select new { contactID = contact.contactID, CompanyID = item.CompanyID, contactName = item.contactName, contactEmail = item.contactEmail };


...ma niente da fare continua a darmi record doppi

Cmq grazie ancora.

Aikon

...questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!
3.117 messaggi dal 29 ottobre 2001
Contributi | Blog
Al posto del groupby, perché non usi il Distinct sulla lista degli oggetti tornati?

Ciao
.
234 messaggi dal 25 gennaio 2002
andrewz ha scritto:
Al posto del groupby, perché non usi il Distinct sulla lista degli oggetti tornati?

Ciao
.


Ciao Andrea,
non ho capito molto bene...potresti scrivere cio' che intendi?

Grazie

Aikon

...questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!
3.117 messaggi dal 29 ottobre 2001
Contributi | Blog
Linq permette di fare il distinct dei dati tornati. Per esempio:
var coll = (from c in tua_collection
    select c).Distinct();


Ciao
Modificato da andrewz il 05 agosto 2008 13.13 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.