Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    1,968

    [VB.NET] Gestire dinamicamente una proprietà dell'entità

    Ciao a tutti!
    Ormai mi sono data all'E.Framework per gestire il mio db MySQL e a LINQ per la manipolazione dei vari resultsets.

    C'è una cosa (tra le altre 2.000.000) che non ho capito come fare: gestire i "type" delle proprietà...

    Mettiamo il caso che voglia scrivere una funzione che somma tutti i valori di una colonna della mia entità:

    codice:
    function somma(byVal miaCol as ????)
    
    end Function
    Ed anche dichiarando il tipo come gli passo il dato del nome colonna? Stringa? O Come?

    Scusate la domanda...so che è sicuramente idiota ma proprio non ho son riuscita a trovare questa tipologia di oggetto

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,816
    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    Mettiamo il caso che voglia scrivere una funzione che somma tutti i valori di una colonna della mia entità
    Se hai una colonna e una entità, il valore è uno solo, quindi la somma è presto detta.
    Forse tu vuoi la somma dei valori di una proprietà specifica per tutte le entità presenti?

    In quel caso, non ti serve una funzione ma è sufficiente una espressione LINQ, tipo

    codice:
    Dim Result As Integer = ( _
    	From item In db.Tabella _
    	Select item.CampoDaSommare) _
    .Sum()
    Spero di aver capito bene la necessità.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  3. #3
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    1,968
    Ciao Alka, no quello di sommare era solo un esempio per far capire cosa mi serve.
    Partendo dal presupposto che probabilmente sto sbagliando i vocaboli (quella che io chiamo colonna la intendo come una column di una datatable).

    In modello EF io (se ho capito bene) per entità intendo quelle che sono le "datatable" e per proprietà quelle che solo le "datacolumn" ma forse mi sbaglio

    Come ho già detto l'esempio della somma era solo per far capire cosa mi serve, io vorrei poter puntare ad una proprietà (column ?!?) in modo dinamico così da poterla passare a delle funzioni.
    Quella che è a tutti gli effetti una "datacolumn" in realtà cos'è? Quando dichiaro una variabile ByVal come argomento di una funzione che tipo di oggetto sarà?

    Spero di esser stata più chiara!

    Grazie!

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,816
    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    In modello EF io (se ho capito bene) per entità intendo quelle che sono le "datatable" e per proprietà quelle che solo le "datacolumn" ma forse mi sbaglio
    Sì, se fai il "reverse engineering" del database costruendoci il modello di EF, per ogni tabella del DB viene creata una classe.
    Una istanza/oggetto di quella classe rappresenta una entità, ovvero un record della tabella di riferimento, mentre l'oggetto possiede tante proprietà quante sono le colonne della tabella di origine, e il framework si occupa di mappare su una enumerazione di oggetti i record di una tabella copiando i valori dei campi all'interno delle singole proprietà.

    In pratica, questo è il lavoro più tipico di un ORM.

    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    io vorrei poter puntare ad una proprietà (column ?!?) in modo dinamico così da poterla passare a delle funzioni.
    Non è chiaro cosa si intende per "puntare". Quello che puoi fare con la proprietà è ottenere il suo nome, oppure risalire tramite Reflection all'oggetto che ne definisce le caratteristiche, oppure passare direttamente il valore scrivendo il nome della proprietà in modo letterale.

    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    Quella che è a tutti gli effetti una "datacolumn" in realtà cos'è?
    Sinteticamente, è la proprietà di un oggetto.

    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    Quando dichiaro una variabile ByVal come argomento di una funzione che tipo di oggetto sarà?
    Quando dichiari un parametro/argomento di una funzione, sei tu a stabilire il tipo di dato al momento della dichiarazione, e può essere un tipo di dato qualsiasi.

    Quote Originariamente inviata da Veronica80 Visualizza il messaggio
    Spero di esser stata più chiara!
    Direi di no, ma credo che sia più proficuo se dici qual è l'obiettivo finale della cosa, cioè l'effetto o il vantaggio che vuoi ottenere, per l'utente o per te sviluppatore, anzi sviluppatrice.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Delphi Succinctly (e-book)

  5. #5
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    1,968
    Allora cerco di spiegarmi meglio!

    Non ho un obbiettivo preciso in questo momento ma coi dataset creavo tutta una serie di funzioni personalizzate che mi restituivano i dati estratti in modo personalizzato.

    Un esempio:

    Controllare se un valore esiste gi� per una colonna (propriet� in questo caso) in modo da non avere doppioni.
    Io passavo il datatable, il nome della colonna ed il valore da verificare:

    codice:
    Function cercaDuplicato(ByVal MiaTab As DataTable, ByVal nomeCol As String, ByVal mioVal As String) As Integer
            Dim res() As DataRow = MiaTab.Select(String.Concat(nomeCol, "=", mioVal)
            Return res.Count
        End Function
    in questo modo passando semplicemnte una chiamata:

    codice:
     if cercaDuplicato(miaDataTable, "mioCampo_DT", "mioValore")>0
                  'C'� un duplicato
               end if
    in questo caso non passo il tipo di colonna (perch� ogni dataTable essendo tipizzata ha un tipo non generico di colonna) ma il nome che poi utilizzo come stringa
    So che posso tranquillamente fare cos�:
    codice:
     if miaDataTable.select("mioCampo_DT='mioValore'").count>0
     'C'� un duplicato
    end if
    ma come sempre ho solo buttato gi� un esempio per far capire cosa vorrei fare.
    Qui ho la possibilit� di usare .Select e .Count ma in alcuni casi non ci sono funzioni gi� pronte quindi me le creo ma per far cos� come faccio a puntare ad una colonna precisa per poi fare filtri ecc?

    Spero sia pi� chiaro xD

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 © 2019 vBulletin Solutions, Inc. All rights reserved.