44 messaggi dal 17 maggio 2011
Ciao a tutti,

Chi è quella buon anima che mi da una mano a tradurre questa istruzione SQL in linq, ci sto diventando matto.

SELECT * FROM Plants
JOIN Cities ON Plants.City_Id = Cities.Id
LEFT JOIN DailyStationData ON DailyStationData.Plant_Id = Plants.Id AND DailyStationData.DayAcquired = '25/06/2019'
where DailyStationData.Id IS NULL

In totale io devo selezionare tutti i Plant che NON hanno una tupla in DailyStationData considerando che la DayAcquired = al giorno odierno.
Ho anche delle navigation property da valorizzare come Cities, ne ho messa solo una per non complicare la cosa, ma un esempio di come incastrare la left join di DailyStationData e cities sarebbe utile.

Grazie mille
Ciao
Paolo
11.645 messaggi dal 09 febbraio 2002
Contributi
Ciao Paolo,
prova così sfruttando le proprietà di navigazione che:
  • da Plant ti portano alla relativa City (una singola entità City);
  • da Plant ti portano alle relative DailyStationData; (una collezione di entità DailyStationData)



var plants = db.Plants //Parto dalle Plants
.Include(p => p.City) //Includo la City
.Where(p => !p.DailyStationData.Any(d => d.DayAcquired == DateTime.Today)) //Recupero solo le plant che NON abbiano un DailyStationData della giornata corrente.
.ToList();


Ovviamente questo presuppone che le suddette proprietà di navigazione esistano nella classe di entità City.

ciao,
Moreno
Modificato da BrightSoul il 26 giugno 2019 01:11 -

Enjoy learning and just keep making
702 messaggi dal 08 aprile 2009
Se DayAcquired è DateTime non ti prende anche l'ora?
Io di solito ho questi problemi dove devo troncare in fase di selezione e soprattutto le comparazione l'ora.
11.645 messaggi dal 09 febbraio 2002
Contributi

Se DayAcquired è DateTime non ti prende anche l'ora?

Sì, contiene anche l'ora, ma a giudicare da questo pezzo della query SQL originale, penso che sia impostata sulla mezzanotte.

DailyStationData.DayAcquired = '25/06/2019'


E dato che anche DateTime.Today è impostato sulla mezzanotte, l'orario non dovrebbe essere un problema.

Se invece ho interpretato male la query SQL originale, allora bisognerà correggere la query LINQ che ho proposto (ad esempio se su DB il campo DayAcquired fosse una stringa e non un date come ho supposto io).

ciao,
Moreno

Enjoy learning and just keep making
44 messaggi dal 17 maggio 2011
Non ci posso credere, un giorno intero buttato per cercare di scrivere sta query.
Non sapevo proprio (Oltre a non averlo mai visto in rete) che si potesse integrare la negazione con il semplice !.

Grazie, mille è perfetta.


Sì, contiene anche l'ora, ma a giudicare da questo pezzo della query SQL originale, penso che sia impostata sulla mezzanotte.


Si esattamente.

Ho comprato qualche corso su Udemy per imparare ad usare linq in modo efficiente, speriamo serva... ad oggi faccio estrema difficoltà.
11.645 messaggi dal 09 febbraio 2002
Contributi
Sì, fai bene, sostanzialmente bisogna reimparare a fare le query e prima di tutto capire che bisogna avvalersi delle proprietà di navigazione. Il primo istinto, infatti, è quello di fare le join come in SQL.

ciao,
Moreno

Enjoy learning and just keep making

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.