我有需要通过名字订购查询的情况 - 比如 1.绿色 蓝色 灰色 黄色
如果查询不包含某些元素,则必须维护订单。例如,查询不包含" Blue"然后列表看起来像 1.绿色 灰色 3.黄色
我做了模特:
namespace MotorzWeb.ViewModels.Manage
{
public class UserClassifiedsCategoriesViewModel
{
public Int64 Id { get; set; } //Row Number
public string UserId { get; set; }
public string Name { get; set; }
public Int64? TotalClassifiedsByCategory { get; set; }
}
}
在此模型中,前面提到的名称称为Name。 要从数据库中获取数据,我使用以下查询:
var totalClassified = db.UserClassifiedsCategories
.Where(c => c.UserId == userId)
.ProjectTo<UserClassifiedsCategoriesViewModel>(mapper.ConfigurationProvider)
.ToList();
我想我应该制作List,我在其中定义正确的ordring,如下所示:
public static IEnumerable<SelectListItem> OrderedCategoryNames( ResourceManager resourceManager)
{
return new List<SelectListItem>
{
new SelectListItem { Text = resourceManager.GetString("Green"), Value = "Green" },
new SelectListItem { Text = resourceManager.GetString("Blue"), Value = "Blue" },
new SelectListItem { Text = resourceManager.GetString("Grey"), Value = "Grey" },
new SelectListItem { Text = resourceManager.GetString("Yellow"), Value = "Yellow" }
};
}
然后,这是我还没弄明白的部分......如何通过OrderedCaregoryName列表订购totalClassified查询?有人可以提供建议或例子吗? 非常感谢你:))
答案 0 :(得分:1)
您可以创建另一个列表,以有序的方式指定名称,并使用IndexOf
方法中的OrderBy
方法。 OrderBy
方法采用键选择器函数,IndexOf
方法将返回列表中项目的位置(索引)。
var totalClassified = db.UserClassifiedsCategories
.Where(c => c.UserId == userId)
.ProjectTo<UserClassifiedsCategoriesViewModel>(mapper.ConfigurationProvider)
.ToList();
var orderList = new List<String>
{
"Green",
"Blue",
"Yellow",
"Gray"
};
var totalClassifiedOrdered = totalClassified.OrderBy(d => orderList.IndexOf(d.Name));
totalClassifiedOrdered
将是UserClassifiedsCategoriesViewModel
的集合。如果你想要一个SelectListItem列表,你可以在结果上调用Select
方法来获得它。
var optionList = totalClassifiedOrdered
.Select(x=>new SelectListItem { Value=x.Name, Name =x.Name}).ToList();