온라인 검색 및 linq 동적 순서에 대한 적절한 구현에 대한 과거 stackoverflow 게시물을 통해 갈 때, 나는 내 자신의 구현을 그 전에 내가 본 다른 솔루션 borrows a few things에서 나온.이 LINQ 동적 orderby 메서드는 스레드로부터 안전합니까?
내가 알아야 할 것은이 구현이 threadsafe인지 여부입니다. 그것은 정적 메서드에 매개 변수로 열거 형 제네릭 형식의 개체 (참조 형식)을 전달 오전 믿지 않아요하지만 내가 뭔가를 놓치고 잘하면 완전히 threadsafe 만들 수 있는지 알고 싶습니다.
public class OrderByHelper
{
public static IEnumerable<T> OrderBy<T>(IQueryable<T> items, string sortColumn, string sortDirection, int pageNumber, int pageSize)
{
Type t = typeof(T).GetProperty(sortColumn).PropertyType;
return (IEnumerable<T>)(typeof(OrderByHelper)
.GetMethod("OrderByKnownType")
.MakeGenericMethod(new[] { typeof(T), t })
.Invoke(null, new object[] { items, sortColumn, sortDirection, pageNumber, pageSize }));
}
public static IEnumerable<K> OrderByKnownType<K, T>(IQueryable<K> items, string sortColumn, string sortDirection, int pageNumber, int pageSize)
{
var param = Expression.Parameter(typeof(K), "i");
var mySortExpression = Expression.Lambda<Func<K, T>>(Expression.Property(param, sortColumn), param);
if (!string.IsNullOrEmpty(sortDirection))
{
if (sortDirection == "ASC")
return items.OrderBy(mySortExpression).Skip((pageNumber - 1) * pageSize).Take(pageSize);
else
return items.OrderByDescending(mySortExpression).Skip((pageNumber - 1) * pageSize).Take(pageSize);
}
else
throw new InvalidOperationException("No sorting direction specified.");
}
}