如何通过SelectListItem订购查询?

时间:2016-10-26 13:26:48

标签: c# asp.net linq

我有需要通过名字订购查询的情况 - 比如  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查询?有人可以提供建议或例子吗? 非常感谢你:))

1 个答案:

答案 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();