Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,473

    semplificare con una sola if

    salve a tutti
    mi ritrovo questo pezzo di codice, che cosi a leggerlo è bruttissimo, vorrei semplificarlo scrivendo una sola IF
    in pratica deve prendere un valore da una data nullable.
    prima controlla se ci sono record, poi se il numero è >0 e poi se non è null il dato

    consigli?

    codice:
                            string lastUpdate = "";
                            var L = db.DREAM_Log.AsNoTracking().OrderByDescending(ee => ee.Usr_DateMod).Where(ee => ee.IdRecord == Esame.IDEsame);
    
    
                            if (L != null)
                            {
                                if (L.Count() > 0)
                                {
                                    if (L.First().Usr_DateMod.Value != null)
                                    { lastUpdate = L.First().Usr_DateMod.Value.ToShortDateString(); }
                                }
                            }
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  2. #2
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,138
    unifica le if... non capisco quale sia il problema

  3. #3
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,473
    Quote Originariamente inviata da URANIO Visualizza il messaggio
    unifica le if... non capisco quale sia il problema
    se faccio una IF con AND e AND
    e non ci sono record, oppure è null il valore
    il compilatore mi da subito errore in quanto esegue tutti nello stesso momento
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  4. #4
    usa AndAlso invece di And

  5. #5
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,138
    Quote Originariamente inviata da Kahm Visualizza il messaggio
    se faccio una IF con AND e AND
    e non ci sono record, oppure è null il valore
    il compilatore mi da subito errore in quanto esegue tutti nello stesso momento
    In c# l'ìoperatore and && equivale all'Andalso di VB.NET, quindi se il primo operatore è falso non continua e quindi non va in errore

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,945
    Quote Originariamente inviata da Kahm Visualizza il messaggio
    vorrei semplificarlo scrivendo una sola IF
    in pratica deve prendere un valore da una data nullable.
    prima controlla se ci sono record, poi se il numero è >0 e poi se non è null il dato
    consigli?
    Innanzitutto, puoi eliminare in sicurezza la prima condizione if (L != null) che non serve assolutamente a nulla, in quanto il valore sarà sempre diverso da null.

    In secondo luogo, osservando la presenza di db.DREAM_Log.AsNoTracking(), immagino che si tratti di una espressione LINQ applicata ad Entity Framework, quindi occhio perché quando esegui prima Count() e poi First(), in realtà stai eseguendo la query due volte (inutilmente), la prima per calcolare il conteggio e la seconda per recuperare di nuovo i record prendendo il primo.

    Puoi sintetizzare il tutto con una istruzione sola che vada a recuperarti direttamente il valore che stai cercando dall'eventuale unico record - se esiste - che soddisfa la tua condizione dopo aver applicato l'ordinamento; in breve qualcosa del genere:

    codice:
    var usrDateMod = db.DREAM_Log.AsNoTracking()
    	.OrderByDescending(ee => ee.Usr_DateMod)
    	.Where(ee => ee.IdRecord == Esame.IDEsame)
    	.Select(ee => ee.Usr_DateMod)
    	.FirstOrDefault();
    
    var lastUpdate = usrDateMod != null ? usrDateMod.Value.ToShortDateString() : string.Empty;
    Ovviamente non ho verificato se il codice compila ed è corretto sintatticamente perché non ho a disposizione i tipi con cui stai effettivamente lavorando, ma dovrebbe rendere l'idea.

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

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,473
    Quote Originariamente inviata da alka Visualizza il messaggio
    Innanzitutto, puoi eliminare in sicurezza la prima condizione if (L != null) che non serve assolutamente a nulla, in quanto il valore sarà sempre diverso da null.
    ho messo delle if in quanto se non trovava il record dava errore
    dici che mettendo una firsOrdefault posso evitare una IF?
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,945
    Quote Originariamente inviata da Kahm Visualizza il messaggio
    ho messo delle if in quanto se non trovava il record dava errore
    La if() che verifica se una espressione LINQ è diversa da null è sempre inutile: con la sintassi LINQ, vai a definire una espressione che esprime (in questo caso, trattandosi di Entity Framework) una query da eseguire sul DB, quindi è inutile costruirla con la sintassi LINQ e andare a verificare se è inizializzata, perché l'espressione viene comunque creata.

    Quote Originariamente inviata da Kahm Visualizza il messaggio
    dici che mettendo una firsOrdefault posso evitare una IF?
    Più che pensare alle condizioni da evitare, rileggi le mie osservazioni sopra e nel messaggio precedente e analizza il codice proposto per capire quello che avviene e determinare quindi in autonomia quello che serve (o non serve).
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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