Ho questo problema per qualche ora ma oggi ho raggiunto il punto di non ritorno e sto chiedendo il tuo aiuto.Creare un tipo anonimo a seconda delle diverse condizioni e convertirlo in una classe
Supponiamo che io ho questo codice:
var query = DbContext.Table.Where(x => x.z == true).Select(x => new { x.a, x.b, x.c });
foreach(var item in query)
{
// Do the work
}
io alla fine con questo tipo anonimo e tutto va bene. Ora salta fuori qualcosa che mi fa condizionare la clausola Dove, quindi devo fare una query diversa a seconda della condizione e questo è dove sono veramente frustrato:
if(something)
{
var query = DbContext.Table.Where(x => x.z == true && x.zz == false).Select(x => new { x.a, x.b, x.c });
foreach(var item in query)
{
// Do the work
}
}
else
{
var query = DbContext.Table.Where(x => x.z == true).Select(x => new { x.a, x.b, x.c });
foreach(var item in query)
{
// Do the work
}
}
perché il lavoro da fare nel foreach
il ciclo è esattamente lo stesso e non dovrei doverlo ripetere.
Così, invece di lavorare con il tipo anonimo ho dichiarato una nuova classe e provato questo:
class MyQuery
{
public int a { get; set; }
public string b { get; set; }
public decimal? c { get; set; }
}
IQueryable<MyQuery> query = null;
if(something)
{
query = (IQueryable<MyQuery>)DbContext.Table.Where(x => x.z == true && x.zz == false).Select(x => new { x.a, x.b, x.c });
}
else
{
query = (IQueryable<MyQuery>)DbContext.Table.Where(x => x.z == true).Select(x => new { x.a, x.b, x.c });
}
foreach(var item in query)
{
// Do the work
}
Ma ora ho un 'System.InvalidCastException'
gettati perché sto ancora ricevendo un tipo anonimo e apparentemente si può' essere gettato nella mia classe
Voglio evitare la ripetizione del codice per motivi di manutenzione ma non so come farlo. Sento che mi manca qualcosa di essenziale qui, ma non riesco a trovare quello che il tuo aiuto è il benvenuto e apprezzato.
Grazie mille per il vostro aiuto.
Il secondo codice funzionerebbe ancora con la classe anonima (è sufficiente rimuovere il cast). L'unica volta che ti serve una classe personalizzata è quando vuoi trasferire i dati dentro o fuori un metodo. – juharr