Ich bin neu in Entity Framework und linq. Ich arbeite mit asp.net mvc 5 und C#. ich eine Abfrage mit dynamischer Sortierung wie folgt schreiben:Entity Framework linq orderby Funktion
public static IEnumerable<T> OrderByDynamic<T>(this IEnumerable<T> source, string propertyName, bool Ascending)
{
if (Ascending)
return source.OrderBy(x => x.GetType().GetProperty(propertyName).GetValue(x, null));
else
return source.OrderByDescending(x => x.GetType().GetProperty(propertyName).GetValue(x, null));
}
und in meinem Repository kann ich schreiben:
string sortExpr = "name";
_objDB.hotels.Where(s => (s.city_id = 1))
.OrderByDynamic(sortExpr, Ascending).ToList();
Dieser Code funktioniert gut, wenn sie auf einer Spalte einer Tabelle ist das Sortieren, aber ich brauche nach einer SQL-Funktion sortieren. Ich trat in die Funktion in das .edmx
Modell mit dem folgenden Code
[EdmFunction("hotelReservation.Core.Data", "getHotelMinPrice_cap")]
public static int getHotelMinPrice_cap(int Hotel_id, int capacity, DateTime enter_date, DateTime exit_date)
{
throw new NotSupportedException("Direct calls are not supported.");
}
und meiner SQL-Auswahl ist so etwas wie:
select *
from hotel
where city_id = 1
order by dbo.getHotelMinPrice_cap(hotel.id,1,'2001-01-01', '2021-01-01')
Wie kann ich die letzte SQL-Abfrage mit dynamischer Sortierung in Linq schreiben?
Sortieren nach Verwendung einer Funktion eine schlechte Praxis ist. Sie sollten Ihre Abfrage zuerst optimieren. Stellen Sie Ihre Funktion 'getHotelMinPrice_cap' zur Verfügung, damit der Weg optimiert werden kann. –
select min (room_price.price) von room_price, room_definition wo room_price.roomDef_id room_definition.ID = und room_definition.Hotel_id = Hotel_ID und room_definition.capacity = und Kapazität (room_price.start_date zwischen enter_date und exit_date oder room_price.stop_date zwischen enter_date und exit_date) – saeedeh
Ich frage nach SQL-Funktion. –