PDA

View Full Version : [Linq vs Sql]Incongruenze


RaouL_BennetH
28-10-2010, 14:48
Ciao a tutti :)

Mi trovo dinanzi ad uno strano problema, oddio, dico 'strano' forse perchè non ci arrivo da me.

Sto lavorando con Entity Framework.

Allora, se eseguo una query direttamente su sql server, vedo i risultati corretti, se invece, lato client, richiamo la query, i risultati sono diversi, mi spiego:



//da sql server
select * from vista

Data --------- Posto ----- Numero ----- Valore
01/10/2010 poltrona 25 2,7
01/10/2010 cabina 25 0,9
02/10/2010 poltrona 25 6,1
03/10/2010 cabina 25 1,8

//etc...



Lato client invece:



var result = (from sit in context.MyObject
where sit.Date.Year == 2010 && sit.Date.Month == 10
select sit);

//oppure

var result = context.MyObject.Where(sit => sit.Date.Year == 2010 && sit.Date.Month == 10);



Mi succede questo, che se la data è uguale (come nel mio caso), mi mostra:


Data --------- Posto ----- Numero ----- Valore
01/10/2010 poltrona 25 2,7
01/10/2010 poltrona 25 2,7
02/10/2010 poltrona 25 6,1
03/10/2010 cabina 25 1,8


Ovvero, non mi mostra l'altro valore presente per lo stesso giorno.

Dove sbaglio ?

Grazie mille :)

RaouL.

RaouL_BennetH
29-10-2010, 09:25
uppettino :help:

RaouL_BennetH
29-10-2010, 11:08
edit : scusatemi... non ho risolto..

RaouL_BennetH
29-10-2010, 16:18
Forse ho capito:

se anzichè usare una vista utilizzo una tabella, i risultati sono corretti.
Credo dipenda dal fatto che una vista non ha una chiave primaria.

gugoXX
29-10-2010, 19:50
Non ho capito bene il problema.
Cosa hai, cosa sottometti e cosa ottieni?
Comunque termina la tua query sul DB con un .ToArray(), in modo da far tornare i risultati dal mondo database-funzionale a quello vettoriale (o scalare) in memoria.

cdimauro
30-10-2010, 01:44
Forse ho capito:

se anzichè usare una vista utilizzo una tabella, i risultati sono corretti.
Credo dipenda dal fatto che una vista non ha una chiave primaria.
Nemmeno le tabelle sono obbligate ad avere una chiave primaria.

Credo che il problema sia un altro.

RaouL_BennetH
30-10-2010, 23:00
Ciao ragazzi e grazie per avermi risposto :)

@gugoXX

partendo da quello che ho:

lato db, una tabella molto semplice, pari pari a quella indicata all'inizio del 3d.

Se mappo quella tabella con ef, e mi faccio restituire una lista lato client (ho provato sia con una web app che con una winforms), i risultati che vedo in output sono corretti.

Ho fatto poi una vista su quella tabella, banalmente con create view bla as select * from tabella.

Ecco, se mappo la view con ef, i risultati non sono corretti. Succede che se ci sono più eventi per una stessa data, in output ottengo soltanto gli eventi presenti in corrispondenza della prima data e non delle altre, cioè:



30/10/2010 asd bla xxx
30/10/2010 asd bla xxx

//mentre invece dovrebbe essere
30/10/2010 asd bla xxx
30/10/2010 ggg mna 123



Su sql server invece, sia che interrogo la tabella, sia che interrogo la vista, i risultati sono corretti entrambi.

Ho appena provato il metodo .ToArray() ma il risultato non cambia.


@cdimauro

Ne sono certo. Ho da poco intrapreso la mia avventura con LinQ e Entity Framework ( di cui mi sono innamorato perso!!) . E' molto vasto e al momento riesco a fare solo qualcosa di molto primitivo :p

cdimauro
30-10-2010, 23:47
Purtroppo non lavoro in C# per cui non saprei come darti una mano.

Posso soltanto dirti che ho realizzato in Python qualcosa di simile a LINQ & ORM (di SQL mancano soltanto le JOIN da implementare), per cui ti capisco benissimo. :sbavvv:

khelidan1980
31-10-2010, 10:35
Purtroppo non lavoro in C# per cui non saprei come darti una mano.

Posso soltanto dirti che ho realizzato in Python qualcosa di simile a LINQ & ORM (di SQL mancano soltanto le JOIN da implementare), per cui ti capisco benissimo. :sbavvv:

Ma dormi anche te?? :asd:

Ps: scusate l'OT!

cdimauro
31-10-2010, 15:53
Dormire è parola grossa per un papà. :D

RaouL_BennetH
03-11-2010, 16:17
ragazzi, non riesco a venirne a capo :muro:

E' assurdo. Devo ricorrere ad una stored perchè dalla vista i dati non li tiro fuori.

gugoXX
05-11-2010, 22:03
ragazzi, non riesco a venirne a capo :muro:

E' assurdo. Devo ricorrere ad una stored perchè dalla vista i dati non li tiro fuori.

Il problema e' ovviamente non replicabile da qui, dato che se quanto hai descritto e' corretto, il risultato e' ovviamente errato.
Non ho pero' capito perche' tu debba passare attraverso una alternativa stored procedure, dato che e' una filosofia un poì contraria, seppur compatibile, con LINQ

RaouL_BennetH
07-11-2010, 23:37
Il problema e' ovviamente non replicabile da qui, dato che se quanto hai descritto e' corretto, il risultato e' ovviamente errato.
Non ho pero' capito perche' tu debba passare attraverso una alternativa stored procedure, dato che e' una filosofia un poì contraria, seppur compatibile, con LINQ

Ciao gugoXX :)

Domani posto l'intera struttura "incriminata", io sono sicuro di aver sbagliato qualcosa o nella creazione della vista o nel come sto utilizzando ef o, cosa ancora più probabile, ho sbagliato entrambe le cose.