当前位置: 首页 > 编程语言 > C#

如何将多个表达式传递给EF的OrderBy?分享

时间:2023-04-10 11:44:51 C#

EF如何将多个表达式传递给OrderBy?我使用的是EF4.2,但我希望它也适用于EF4和4.1。我想将一个IQueryable和多个Expression传递给一个方法,并让该方法将OrderBy和ThenBy适当地应用于IQueryable。我找到了这个答案并根据以下方法编写了以下方法:publicIQueryableApplyOrderBy(IQueryablequery,IEnumerable>orderBy){if(orderBy==null){returnquery;}IOrderedQueryable输出=null;foreach(varexpressioninorderBy){if(output==null){output=query.OrderBy(expression);}else{output=output.ThenBy(表达式);}}返回输出??询问;是字符串,所以工作正常,但是当我尝试按int属性排序时,出现异常:无法将类型“System.Int32”转换为类型“System.IComparable”。LINQtoEntities仅支持转换实体数据模型基元类型。关于如何解决这个问题或完全不同的方法有什么建议吗?我考虑过传入一个IEnumerable,但随后需要弄清楚如何转换回特定类型(例如Expression_expression;私人布尔_降序;publicOrderByExpression(Expression>expression,booldescending=false){_expression=expression;_descending=降序;(_表达);否则返回query.OrderBy(_expression);}publicIOrderedQueryableApplyThenBy(IOrderedQueryablequery){if(_descending)returnquery.ThenByDescending(_expression);否则返回query.ThenBy(_expression);这样:publicIQueryableApplyOrderBy(IQueryablequery,paramsIOrderByExpression[]orderByExpressions)whereTEntity:class{if(orderByExprsessions==null)返回查询;IOrderedQueryable输出=null;foreach(varorderByExpressioninorderByExpressions){if(output==null)output=orderByExpression.ApplyOrderBy(query);否则输出=orderByExpression.ApplyThenBy(输出);}返回??询问;它可以按以下方式使用:varquery=context.Users...;varqueryWithOrderBy=ApplyOrderBy(query,newOrderByExpression(u=>u.UserName),//一个字符串,ascnewOrderByExpression(u=>u.UserId,true));//一个int,descvarresult=queryWithOrderBy.ToList();//没有为我抛出异常在OrderByExpression实例中显式指定泛型类型参数的OrderByExpression不好,但是我找不到让编译器推断类型的方法(我希望它会,因为编译器从ApplyOrderBy方法的查询中将User推断为TEntity,然后我希望它知道OrderByExpression的TEntity(也等于User)。所以lambda参数u应该称为User,然后编译器可以从中派生类型字符串UserName和int来自UserId。但这个理论显然是错误的。编译器抱怨并希望显式使用泛型类型。)以上是C#学习教程:如何将多个表达式传递给OrderByforEF?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: