zoukankan      html  css  js  c++  java
  • Linq EF 根据字符列表排序或List根据列表排序以及Linq查询类型转换

    //model.BBSCategoryIDList=>{10,23,12}或者{1,3,2}
    //model.BBSCategoryIDs=>1,3,2或者10,23,12
    //SqlFunctions命名空间System.Data.Objects.SqlClient;是linq中的一些方法整合
    //如果model.BBSCategoryIDs是一个字符如1,3,2而不是10,23,33的,那么下面这个linq直接排序是可以实现以1,3,2顺序获取的
    model.BBSCategoryNameList = dbContext.BBSCategories.Where(u => model.BBSCategoryIDList.Contains(u.ID)).
    OrderBy(u => SqlFunctions.CharIndex(model.BBSCategoryIDs, SqlFunctions.StringConvert((double)u.ID))).Select(u => u.Title).ToList();
    

     上方中linq的排序使用,只能针对char类型排序,而不能针对string,这主要是SqlFunctions.CharIndex方法是char型处理

    其中有一个类型转换SqlFunctions.StringConvert((double)u.ID)),像一般的Convert.ToString(u.ID)或者是u.ID.ToString()在linq中是不允许使用的,此时,就需要使用SqlFunctions中的方法进行数据处理了。

    因为本次我需要的是根据ID列表进行排序,没办法使用上面的方法,至于是否有能够实现的,暂时还没找到。现在的处理方式如下

                    List<IDAndTitleDTO> categoryIDTitleList = dbContext.BBSCategories.Where(u => model.BBSCategoryIDList.Contains(u.ID)).Select(u => new IDAndTitleDTO() { ID=u.ID,Title=u.Title}).ToList()
    .OrderBy(u=>Array.IndexOf(model.BBSCategoryIDList.ToArray(),u.ID)).ToList();//获取到ID以及Title对象的列表,并且进行列表排序处理
                    model.BBSCategoryNameList = categoryIDTitleList.Select(u => u.Title).ToList();//最后获取名称列表
    

     因为还没找到办法直接linq查询的时候就把名称列表给排序出来,所以使用list获取后再进行排序的方式进行处理。

    Array.IndexOf(model.BBSCategoryIDList.ToArray(),u.ID)
  • 相关阅读:
    全端开发必备!10个最好的 Node.js MVC 框架
    action和servlet的关系
    js模块化
    前端类库
    Windows下配置nginx+php(wnmp)
    DllMain的作用
    在linux上实现DllMain + 共享库创建方法
    QT实现Windows下DLL程序编写
    平台相关的宏
    远程线程的注入 PE的修正
  • 原文地址:https://www.cnblogs.com/danlis/p/7519397.html
Copyright © 2011-2022 走看看