//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列表进行排序,没办法使用上面的方法,至于是否有能够实现的,暂时还没找到。现在的处理方式如下
ListcategoryIDTitleList = 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)