说明:
我的项目正在为orderby,ThenBy等提供一些用户定义的linq扩展方法。我想通过忽略对象的大小写,基于该对象中的字符串属性对对象列表进行排序。
代码:
public static IOrderedQueryable<TEntity> OrderUsingSortExpression<TEntity>(this IQueryable<TEntity> source, string sortExpression) where TEntity : class
{
OrderedQueryable<TEntity> result = null;
try
{
result = source.OrderBy("Title")
// I'm getting an exception here in result.
}
catch (Exception ex)
{
result = source as IOrderedQueryable<TEntity>;
}
return result;
}
public static IOrderedQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> source, string fieldName) where TEntity : class
{
MethodCallExpression resultExp = GenerateMethodCall<TEntity>(source, "OrderBy", fieldName);
return source.Provider.CreateQuery<TEntity>(resultExp) as IOrderedQueryable<TEntity>;
}
private static MethodCallExpression GenerateMethodCall<TEntity>(IQueryable<TEntity> source, string methodName, String fieldName) where TEntity : class
{
Type type = typeof(TEntity);
Type selectorResultType;
var StrComp = StringComparer.OrdinalIgnoreCase;
LambdaExpression selector = GenerateSelector<TEntity>(fieldName, out selectorResultType);
MethodCallExpression resultExp = Expression.Call(typeof(Queryable), methodName,
new Type[] { type, selectorResultType },
source.Expression, Expression.Quote(selector), Expression.Constant(StrComp));
return resultExp;
}
但是最后,我收到一个异常“静态成员=错误CS0119:'NotSupportedException'是一种类型,在给定的上下文中无效”
我认为,它期望使用Enumerable源而不是Queryable。但是我无法修改源类型。
您能提出任何解决方案吗?