80 messaggi dal 17 maggio 2011
flaviovb ha scritto:
var test = db.Plants.Include("Instruments"))
.Where(x => x.Id == id & x.Instruments.Any(i => i.DateTimeRemoval == null)).ToList();

prendi tutt i Plants i cui Instruments hanno DateTimeRemoval == null ed includi nel risultato Instruments

F.
Modificato da flaviovb il 18 dicembre 2019 10:33 -


No non va bene, si ottiene un risultato diverso da questo (SQL completa di quello che vorrei fare)

SELECT * FROM Plants
LEFT JOIN Instruments ON Plants.Id = Instruments.Plant_Id AND DateTimeRemoval IS NULL
LEFT JOIN ParameterInstruments ON ParameterInstruments.Instrument_Id = Instruments.Id
where Plant_Id = 2

Filtrare la left join non è possibile (da quanto letto e capito).
Vero potrei tirare su tutto e poi gestirmela a codice, ma il una situazione potenziale di molti dati è un massacro.

Io per ora ho risolto con due query che non cambia nulla, però mi pare assurdo che (anche da quanto leggo sul sito microsoft) non c'è soluzione
427 messaggi dal 13 novembre 2009
questa è un puo differente da prima. devi usare linq to sql non linq to entity e utilizzare DefaultIfEmpty

var q = (from plant in db.Plants
where plant.Instruments == null || plant.Instruments.Any(c=> c.DateTimeRemoval == null)
select plant).Include("Instruments")

questo tira fuori tutti i plants che non hanno instruments o che hanno instruments con DateTimeRemoval == null
a questo punto aggiungici tu il resto secondo la logica

F.
80 messaggi dal 17 maggio 2011
flaviovb ha scritto:
questa è un puo differente da prima. devi usare linq to sql non linq to entity e utilizzare DefaultIfEmpty

var q = (from plant in db.Plants
where plant.Instruments == null || plant.Instruments.Any(c=> c.DateTimeRemoval == null)
select plant).Include("Instruments")

questo tira fuori tutti i plants che non hanno instruments o che hanno instruments con DateTimeRemoval == null
a questo punto aggiungici tu il resto secondo la logica

F.


Non è differente, l'unica cosa in più è una seconda left join per i parameterinstrument.
Nella query sopra citata comunque vai ad includere tutti gli strumenti, non ottieni un filtro sugli strumenti.
La where condition sul plant non è importante in quanto lo selezione tramite Id.
E' il filtro su include che non è possibile fare.
427 messaggi dal 13 novembre 2009
No include plants senza strumenti o plants con strumenti con data null
Circa la seconda ho in basta aggiungerla con la stessa logicaltrumenti db.database.executequery
https://docs.microsoft.com/it-it/dotnet/api/system.data.linq.datacontext.executequery?view=netframework-4.8
Modificato da flaviovb il 18 dicembre 2019 19:52 -
80 messaggi dal 17 maggio 2011
flaviovb ha scritto:
No include plants senza strumenti o plants con strumenti con data null
Circa la seconda ho in basta aggiungerla con la stessa logicaltrumenti db.database.executequery
https://docs.microsoft.com/it-it/dotnet/api/system.data.linq.datacontext.executequery?view=netframework-4.8
Modificato da flaviovb il 18 dicembre 2019 19:52 -



Si avevo trovato questo metodo e funziona alla grande (ritornandoti anche l'entity valorizzata correttamente).
Anche tu a volte ti sei arreso a linq in favore di puro SQL???
L'unica cosa che mi pare strano è che un nuovo strumento di microsoft non sia orientato a coprire tutte le necessità.

Grazie mille dell'aiuto.
Paolo
427 messaggi dal 13 novembre 2009
Allora qua il discorso è lungo e legato ai progetti ma in generale non uso più EF da quando c’è CodeFirst. Uso Dapper di StackOverFlow. Semplice potente più performante.
In generale ormai faccio app web con servizio e client con framework relativo Angular e recentemente blazor
Quindi in sintesi Dapper Webapi swagger core Angular
80 messaggi dal 17 maggio 2011
ah.....
Bene, e io che mi sto impegnando tanto per imparare bene .core 2.X e >.
Spero di non puntare sul cavallo sbagliato

Ti faccio un'ultima domanda e poi basta altrimenti mi mandi a quel paese.
Ti orienterai sempre verso soluzioni analoghe anche a fronte del .core 3 e .net 5 che permetteranno di sviluppare app.web in c# che verranno eseguite in sandbox dei browser (riporto solo quello che ho sentito al webinar di aspitalia)

Grazie di tutti i confronti, sono molto importanti essendo da solo e non avere proprio nessun contatto con altri programmatori oltre che questa community
427 messaggi dal 13 novembre 2009
Questa la mia opinione personale e professionale. EF non mi ha fatto mai impazzire se non per il fatto che si potesse generale il modello edmx. Ma io che non sono un dba penso che se si struttura bene il database si è a metà dell'opera. Dapper lo uso da alcuni anni e mi ci trovo benissimo. Strutturo comunque le classi come con codefirst ma le relazioni le pk ecc tutto su sql indici e contraints inclusi alla vecchia maniera, sarà un mio limite!
Blazor? Bellissimo. Io vengo da Angularjs e ti dico questo conoscendo anche Angular, i progetti che ho sviluppato per azienda e per conto mio in Angular sono....1. Gli altri di qualche anno tutto in AngularJS e come ci sarà Blazor WebAssembly sarà il passaggio naturale. Anche se devo dire che con AngularJS anni addietro mi sono trovato strabene. D'altronde non amo molto typescript e l'impossibilità di avre il controllo su ciò che scrivo e quanto di differente c'è al deploy, da typescript a javascript.
Aspnet core lo uso dal 2.0 per produrre servizi REST e la logica dei servizi è quella che ho apprezzato di più

Ergo il modello collaudato da anni è web service, oggi core 2.2/3 con swagger per alimentare app mobile e sito web sviluppati con qualunque tecnologia javascript typescript cordova xamarin html5 e vari framework client. Domani magari Blazor Client, oggi sperimentando Blazor Server.
Bootstrap come css, Fluentvalidation come validatore del modello e JWT come token. Mi trovo molto bene, tutti i miei progetti sono strutturati così in maniera tale che quando farò il porting a tecnologie piu avanzate e moderne, fatto uno faccio tutti gli altri.

Resto a disposizione se ti serve un confronto...modestamente. ciao
Modificato da flaviovb il 19 dicembre 2019 18:32 -

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.