Berechnete Spalten in EF mit LINQ
Mit dem folgenden code;
using (var context = new FINSAT613Entities())
{
gridControl1.ForceInitialize();
DateTime endtime= new DateTime(2013, 03, 29, 15, 49, 54);
Text = "endtime:"+endtime.ToShortDateString();
var query =
from A in context.A
join B in context.B on A.ID equals B.ID
join C in context.C on A.ID2 equals C.ID2
where A.endtime> endtime && A.Chk.StartsWith("320")
select new
{
A.ID,B.FOO,C.BAR etc...
};
BindingSource.DataSource = query;
gridControl1.DataSource = BindingSource;
}
Wie kann ich fügen Sie berechnete Spalten, um es?(Vielfaches ein.bar mit b.foo zum Beispiel)
Versucht, mit teilweise Klasse, aber kein Glück mit ihm.
public partial class A
{
public decimal Calculated
{
get { return 15; }
}
}
Die genaue Fehlermeldung die ich bekomme, ist :
{"Der angegebene Typ member 'Berechnet' wird nicht unterstützt LINQ to Entities. Nur Initialisierungen, Organisation Mitglieder-und entity-Navigations-Eigenschaften werden unterstützt."}
- Deine Lösung sollte funktionieren, was ist das problem, das Sie haben?
- Aktualisiert mit der Fehlermeldung die ich bekomme...
- Sind Sie versuchen, die Daten zu filtern, mithilfe der berechneten Spalte?
- NÖ,nur tun einige Tests,es gibt einfach zurück, 15.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erstellen, die Klasse, die hat alle benötigten Felder: id, foo, bar, usw. und fügen Sie ein Berechnetes Feld ist, dann einfach ändern Sie Ihre Abfrage:
BEARBEITET werden: wenn Sie haben eine Menge von Feldern, die Sie verwenden können, automapper
Hier ist ein Beispiel. Sagen, Sie haben Klasse User aus deiner DB und du hast Klasse UserModel, in dem Sie Hinzugefügt ein Feld FullName, die constist von den Feldern Vorname und Nachname. So Sie möchten, erstellen Sie ein Objekt UserModel vom Objekt-Benutzer aber nicht zu kopieren alle Felder exclicitly. Das ist, wie Sie es tun können:
Haben Sie das gelöst?
Ich habe auf der Suche für ein ordentlicher Weg mich,
Ich weiß nicht, wie mit ViewModels als alle, die ich möchte hinzufügen, um ein vorhandenes Modell nur ein oder zwei Stücke von zusätzliche Infos.
Was ich eher zu tun ist, erstellen Sie einen nicht zugeordneten Bereich in meinem Modell bekommen alle die Infos die ich Brauch aus dem LINQ in ein temporäres Modell und dann führen Sie alle erforderlichen Neuzuordnung in eine weitere Schleife, bevor ich senden Sie es zurück an den client.
So zum Beispiel;
dann in meiner Linq-Abfrage
OK, es bedeutet eine weitere Schleife, aber zumindest ist es nur ein DB-Aufruf.
Andere option wäre, es zu tun, alle in T-SQL und Probleme der T-SQL direkt (oder über eine gespeicherte Prozedur)
dieser link erklärt, wie Sie - als zusätzlichen bonus, diese Methode ist viel schneller, bei komplexeren Abfragen, aber es fühlt sich immer ein bisschen wie ein hack zu mir.
http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored-procedures.aspx
Habe ich erreicht dies, indem Sie meine Daten in eine Liste ersten. Dies ist wahrscheinlich schrecklich (vor allem, wenn Sie eine große Menge von Ergebnissen), aber es funktioniert und ist einfach zu verstehen.
Gibt es eine Schleife beteiligt gehen durch die ganze Liste. Ich bin mir nicht sicher, ob andere Lösungen erfordern, aber ich bin auch derzeit eine harte Zeit haben, Sie zu verstehen, also brauche ich etwas, das funktioniert für das, was ich versuche zu tun, die zu füllen eine DropDownList.
Wieder ich glaube nicht, dass diese Lösung ideal:
Sagen wir mal ich habe ein Unternehmen
YourEntities
mit einer TabelleRegistration