Ich habe dieses Problem schon seit einiger Zeit, aber heute habe ich den Wendepunkt erreicht und ich bitte um deine Hilfe.Einen anonymen Typ erstellen, der von verschiedenen Bedingungen abhängt und ihn in eine Klasse umwandeln
Angenommen, ich habe diesen Code:
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
}
ich mit diesem anonymen Typ am Ende und alles ist in Ordnung. Jetzt kommt etwas, das macht mich die Bedingung Where-Klausel, also muss ich eine andere Abfrage machen entsprechend dem Zustand und das ist, wo ich wirklich frustriert bin:
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
}
}
, weil die Arbeit in der foreach
getan werden Zyklus ist genau der gleiche und ich sollte es nicht wiederholen müssen.
Also, statt mit dem anonymen Art der Arbeit habe ich erklärt, eine neue Klasse und versucht, dies:
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
}
Aber jetzt habe ich eine 'System.InvalidCastException'
geworfen, weil ich noch einen anonymen Typ bekommen und offenbar kann es‘ Ich werde in meine Klasse geworfen.
Ich möchte die Wiederholung von Code aus Gründen der Wartung vermeiden, aber ich weiß nicht, wie es geht. Ich fühle, dass ich hier etwas Grundlegendes verpasse, aber nicht finde, was deine Hilfe willkommen und geschätzt ist.
Vielen Dank für Ihre Hilfe.
Ihr zweiter Code würde immer noch mit der anonymen Klasse arbeiten (entfernen Sie einfach die Besetzung). Der einzige Zeitpunkt, an dem Sie eine benutzerdefinierte Klasse benötigen, ist, wann Sie die Daten in eine Methode oder aus einer Methode übernehmen möchten. – juharr