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

GenericLinqOrderBy函数的问题分享

时间:2023-04-10 15:20:20 C#

GenericLinqOrderByFunctionProblems在一个帖子里看到了下面这个函数,它允许用户使用泛型表达式对数据进行排序:publicstaticIOrderedQueryableOrderBy(thisIQueryablesource,Expressionfunc,boolisDescending){returnisDescending?source.OrderByDescending(函数):source.OrderBy(函数);当我尝试使用这个函数时,我收到一条错误消息“类型或名称空间未找到名称“TKey”(您是否错过了using指令或程序集引用?)”。我在这里做了一些愚蠢的事情,但我可以弄清楚。编辑:经过一些研究,我认为我的问题是构建传递给它的表达式。是否可以构建一个可以包含不同类型的表达式?假设我的数据集有一个字符串、一个int和一个bool,我想使用上面的泛型函数对任何项目进行排序。我该怎么做我现在可以工作了:if(IsString){ExpressionexpString=...;//callorderBywithexpString}elseif(IsInt){ExpressionexpInt;//callorderByw/expInt}:我想要的:Expressionexp;if(IsString)exp=...;elseif(IsInt)exp=...;://callorderBywithexp快速观察:你真的不需要使用lambda表达式(Expression>)。一个简单的委托(Func)就可以了。也就是说,我认为您可能正在寻找的答案是:Funcfunc=null;如果(IsString)func=(Ta)=>a.SomeStringValue;elseif(IsInt)func=(Ta)=>a.一些整数值;//用exp调用orderBy我的目标是消除大量重复的代码。除了处理升序/降序,我的“OrderBy”函数还处理其他一些常见逻辑。假设原始帖子中的函数定义,可以简单地这样做:if({needtosortbyinteger})query=OrderBy(objectT,a=>a.myIntegerField,asc);elseif({需要按字符串排序})query=OrderBy(objectT,a=>a.myStringField,asc);:表达式只能有一种类型;我在这里的首选答案是:IQueryablequery=...if({case1}){query=query.OrderBy(x=>x.SomeValue);}elseif({case2}){query=query.OrderBy(x=>x.SomeOtherValue);}...但是如果你想做一些更灵活的事情,你可能需要进入自定义Expression的编写;更像这样的东西。我认为您可能正在寻找的是在linq中具有动态orderby子句的能力。有关此主题的一些好文章,请参阅http://blogs.msdn.com/swiss_dpe_team/archive/2008/06/05/composable-linq-to-sql-query-with-dynamic-orderby.aspx或http://www.equivalence.co.uk/archives/819或http://www.rockstoughts.com/blog/archive/2008/01/24/linq-to-sql-dynamic-queries.aspx看到这个答案适合我的大致的处理过程是:Cheers以上就是C#学习教程:GenericLinqOrderBy函数问题分享的全部内容。代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: