我是實體框架和linq的新手。我正在使用asp.net mvc 5和C#。 我寫的動態排序查詢,如下所示:實體框架linq orderby函數
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));
}
,並在我的倉庫,我可以寫:
string sortExpr = "name";
_objDB.hotels.Where(s => (s.city_id = 1))
.OrderByDynamic(sortExpr, Ascending).ToList();
此代碼工作正常排序是在一個表中的列時,但我需要通過SQL函數進行排序。我進入功能到.edmx
模型下面的代碼
[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.");
}
和我的SQL的選擇是一樣的東西:
select *
from hotel
where city_id = 1
order by dbo.getHotelMinPrice_cap(hotel.id,1,'2001-01-01', '2021-01-01')
我怎麼能寫在LINQ動態排序的最後一個SQL查詢?
爲了用一個函數是一個不好的做法。您應該首先優化您的查詢。提供你的函數'getHotelMinPrice_cap',以便提供優化方式。 –
SELECT MIN(room_price.price) 從room_price,room_definition 其中room_price.roomDef_id = room_definition.ID 和room_definition.Hotel_id = HOTEL_ID和room_definition.capacity =容量 之間enter_date和exit_date或room_price.stop_date之間(room_price.start_date enter_date和exit_date) – saeedeh
我正在詢問sql函數。 –