944 messaggi dal 11 febbraio 2013
ciao
in una app web mvc
volevo sapere come posso configurare il formato data e i numeri che le webapi mi restituiscono in json

le date che ottengo sono cosi
<td>2018-02-12T00:00:00</td>
vorrei la culture it-Ita

e i numeri cosi
<td>98.32000000000001</td>

posso farlo nel file di configurazione ?

grazie
Modificato da jjchuck il 25 giugno 2018 16.57 -
944 messaggi dal 11 febbraio 2013
ho fatto cosi

const settingDate = {'month': '2-digit', 'day': '2-digit', 'year': '2-digit'};

...
const tr = `<tr>
                                <td>${new Date(el.dataConsegna).toLocaleString('it-IT', settingDate)}</td>
                                <td>${new Date(el.dataOrdine).toLocaleString('it-IT', settingDate)}</td>
                                <td>${el.importo.toFixed(2)}</td>               
                            </tr>`;



non so se è corretto anche se funziona.

Però non riesco a ottenere 4 digit per l'anno
Modificato da jjchuck il 26 giugno 2018 09.59 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
sì, è corretto perché di solito la formattazione del dato è una responsabilità che va risolta lato client.
Per il problema dell'anno, dovresti semplicemente cambiare il valore '2-digit' in 'numeric'.

Mentre qui sembra esserci un problema di precisione che va risolto lato server.

98.32000000000001

Se devi trattare valori numerici esatti (ad esempio prezzi) allora devi usare il tipo decimal lato server, anziché float o double altrimenti, come vedi, potresti avere dei problemi di arrotondamento nel momento in cui compi operazioni su quei valori.

ciao,
Moreno
Modificato da BrightSoul il 26 giugno 2018 19.13 -

Enjoy learning and just keep making
944 messaggi dal 11 febbraio 2013
Numeric è perfetto.

Cmq x gli arrotondamenti non ho problemi perché non mostro prezzi ma solo dati aggregati...si tratta di quel crm con le chiamate ajax che mi suggerivi e va alla grande.


Ora volevo aggiungere una tabella pivot sugli ordini x linea e anno.

Dici che con linq riesco?
11.886 messaggi dal 09 febbraio 2002
Contributi

Dici che con linq riesco?

Prova a leggere questo.
https://code.msdn.microsoft.com/windowsdesktop/CSEFPivotOperation-cbdd79db

Male che va, dovrai eseguire una query SQL grezza. Entity Framework ti permette di farlo e poi materializzerà il risultato come entità o come altra classe (es. un DTO). Leggi qui:

https://msdn.microsoft.com/en-us/library/jj592907%28v=vs.113%29.aspx?f=255&MSPPError=-2147217396

ciao,
Moreno

Enjoy learning and just keep making
944 messaggi dal 11 febbraio 2013
ho provato con la query grezza in sql

 var anni = String.Join(",", db.ORDINI.Select(i=>i.Anno).Distinct().AsEnumerable().Select(y => new
            {
                anno = $"[{y}]"
            })).Replace("{","").Replace("}","").Replace("anno","").Replace("=","");

            var pivotOrdini = db.Database.SqlQuery<IEnumerable<string>>(
                "SELECT Linea, " + anni + "  FROM " +
            " ( " +
            "  SELECT dbo.ORDINI.Anno , dbo.ARTICOLI.Linea, dbo.RIGHE.Importo "  
                JOIN....ECC
           " ) src " +
           " PIVOT( " +
           "     SUM(Importo) FOR anno IN(" + anni + ") " +
           "     )  pvt ")
                .ToList();

     


Ottengo
Il tipo di risultato 'System.Collections.Generic.IEnumerable`1[System.String]' non può essere astratto e deve includere un costruttore predefinito

Sembra che vuole un tipo... ma se è cosi come costruisco una classe che porti campi dinamici



class PivotLineaAnno
    {
        public string  2004 { get; set; }
        public string  2005 { get; set; }
...ECC
        public string Linea { get; set; }
        public decimal Importo { get; set; }
    }



L'unico modo che conosco senza passare per la definizione di una classe è con una stored procedure in sql ... cioè con una query dinamica

cosa ne pensi ?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, puoi generare una classe a runtime come vedi in questa soluzione:
https://stackoverflow.com/questions/26749429/anonymous-type-result-from-sql-query-execution-entity-framework

Però io credo che nel tuo caso sia molto più semplice lavorare con un DataTable.
var cmd = ctx.Database.Connection.CreateCommand();
//E qui usi i metodi tradizionali del SqlCommand, tipo ExecuteReader
//che poi userai per riempire un DataTable

Enjoy learning and just keep making
944 messaggi dal 11 febbraio 2013
hai ragione
inoltre è piu alla mia portata

DataTable pivot = new DataTable();
            SqlDataAdapter adapter = new SqlDataAdapter();
            using (SqlConnection conn = new SqlConnection(GetConn()))
            {
                using (conn)
                {
                    conn.Open();

                    SqlCommand cmd = new SqlCommand {CommandType = CommandType.Text, Connection = conn};
                   
                    cmd.Parameters.Add(new SqlParameter("@codcli", codcli));
                    cmd.CommandText = "SELECT * FROM " +
                                      " ( " +
                                    ...
                                      " PIVOT( " +
                                      "     SUM(Importo) FOR anno IN(" + anni + ") " +
                                      "     )  pvt ";

                    adapter.SelectCommand = cmd;
                    adapter.Fill(pivot);
                }
            }


anche se tu mi suggerivi di istanziare Dbcommand in maniera diversa se non sbaglio


Ora mi accorgo che javascript non mi consente di fare un template cosi perchè ce il numero

    result.forEach(el => {
                   
                      const tr = `<tr>
                                     <td>${el.2004}</td>
                                  </tr>`;

                  });


inoltre sono in difficoltà con la renderizzazione della tabella
come faccio a sapere il numero degli anni prima di crearla?

posso avere un array cosi
2004
:
null
2005
:
null
2006
:
8914.61
2007
:
10280.5
2008
:
8139.5
2009
:
16384
2010
:
17510.5
2011
:
23016
2012
:
23391.5
2013
:
18231
2014
:
19378
2015
:
13308
2016
:
22208.82999999999
2017
:
25174.179999999997
2018
:
4494.84
linea
:
"PL1"


Oppure un cliente con un array cosi
2015
:
13308
2016
:
22208.82999999999
2017
:
25174.179999999997
2018
:
4494.84
linea
:
"PL1"

Modificato da jjchuck il 27 giugno 2018 18.14 -

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.