Dieser Code mich nervt,unsicher über diesen Code, hat Code Geruch!
Ich habe ein eigenes Objekt EventDistance aber ich denke, es ist wahrscheinlich nicht erforderlich, es ist nur, dass im nicht sicher, wie es anders zu codieren. Entfernung ist eine Eigenschaft, die ich zu einer Teilklasse für Event hinzugefügt habe. Grundsätzlich möchte ich alle Ereignisse zurückgeben und nach Entfernung sortieren.
Im die Extrarunde foreach Denken ist vielleicht unnötig.
public IQueryable<Event> FindByLocation(float latitude, float longitude)
{
var eventsList = from ev in GetAllEvents()
join i in db.NearestEvents(latitude, longitude)
on ev.ID equals i.ID
select new EventDistance() { TheEvent = ev, Distance = i.Distance };
foreach (var item in eventsList)
{
item.TheEvent.Distance = item.Distance;
}
return eventsList.OrderBy(e => e.Distance).Select(e => e.TheEvent);
}
Dies wird wahrscheinlich nicht funktionieren, wenn der LINQ-Ausdruck von einem Provider behandelt wird, der versucht, es in SQL zu übersetzen. Wenn es bei In-Memory-Objekten auftritt, sollte es funktionieren. –
@qstarin oops, ja, guter Punkt. – Rup
re # 2, Durch Einfügen einer .ToList() vor der Auswahl/Projektion (oder wo immer erforderlich) wird die Evaluierung von IQueryable erzwungen und die DB-Objekte geladen. –