按单个`List`变量对列进行排序我需要按另一个列表中的元素索引对实体框架查询的结果进行排序。我尝试了在其他地方找到的建议,例如.ThenBy(m=>list.IndexOf(m.Term))但我收到HTTP500错误,所以我想知道我是否遗漏了什么。调试时,我得到了这个内部异常。LINQtoEntities无法识别'Int32IndexOf(System.String)'方法,并且此方法无法转换为存储表达式。特别是,我正在考虑这种情况。privateIEnumerablePopulateQuery(stringselectedCampus){varlist=newList{"NoLongerAlphabetical","Fall","Mid","Spring"};return_db.MiaLog1A.Where(m=>m.Campus==selectedCampus).OrderBy(m=>m.StudentName).ThenBy(m=>m.Term)/*我想按*对“学期”进行排序“列表”的顺序。*/.AsEnumerable();有没有办法以这种方式排序,或者我可以按字典排序或创建连接?这应该可以解决问题:privateIEnumerablePopulateQuery(stringselectedCampus){varlist=newList{"Fall","Mid","Spring"};返回_db.MiaLog1A.Where(m=>m.Campus==selectedCampus)。AsEnumerable().OrderBy(m=>m.StudentName).ThenBy(m=>list.IndexOf(m.Term));这是一种疯狂的方式,但它不会返回IEnumerablevardb=newBloggingContext();varlist=(newList{"FR","EN"}).Select((s,i)=>$"select'{s}'as{nameof(OrderIndex.Name)},{i}as{nameof(OrderIndex.Id)}");varorder=db.Set().FromSql(String.Join("union",list));varorderedItems=frompostindb.Posts按顺序加入ln。Lang等于ln.NameintolnPostfromodinlnPost.DefaultIfEmpty()orderbyod.Idselectpost;vardata=orderedItems.ToList();你可以在这里找到BloggingContext的定义我刚刚为语言代码添加了一个Lang字段这将在SQLite,SqlServer和MySQLfororacle中工作,你需要从dual添加,因为EF核心有多糟糕,你需要做OrderIndex的处理过程与处理SQL视图的处理过程相同。在EF6中,有一种使用SqlQuery的更好方法,您不需要像EFcore那样注册。创建的查询是SELECT"post"."PostId","post"."BlogId","post"."Content","post"."Date","post"."Lang","post"."Title","ln"."Id","ln"."Name"FROM"Posts"AS"post"LEFTJOIN(select'FR'asName,0asIdunionselect'EN'asName,1asId)AS"ln"ON"post"."Lang"="ln"."Name"ORDERBY"ln"."Id","post"."Lang"编辑:只记得另一种方式,没那么疯狂,但可能会更好。varlang=newList{"FR","EN"};varorderedItems=frompostindb.Postsorderby(lang[0]==post.Lang)?0:((lang[1]==post.Lang)?1:2)选择帖子;varparam=Expression.Parameter(typeof(Post));varorder=lang.Select((s,i)=>new{s,i}).Aggregate((Expression)Expression.Constant(lang.Count),(agg,i)=>Expression.Condition(Expression.Equal(Expression.Property(param,nameof(Post.Lang)),Expression.Constant(is)),Expression.Constant(ii),agg));varexp=Expression.Lambda(order,param);vardata=db.Posts.OrderBy(exp).ToList();和SQLSELECT"p"."PostId","p"."BlogId","p"."Content","p"."Date","p"."Lang","p"."Title"FROM"Posts"AS"p"ORDERBYCASEWHEN"p"."Lang"='EN'THEN1ELSECASEWHEN"p"."Lang"='FR'THEN0ELSE2ENDEND我仍然认为疯狂的方式对我不知道的事情有用。以上就是C#学习教程:使用单独的`List`变量对列的全部内容进行排序。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
