实体框架按问题排序



我正在尝试使用实体框架构建我的第一个 MVC 4 应用程序。我正在寻找的只是创建一个下拉列表,将每个选项的值和文本设置为相同的值。

这有效,直到我投入GroupBy().

Create.cshtml

@Html.DropDownList("CustomerName",(SelectList)ViewData["companies"]);

票务控制器.cs

ViewBag.companies = new SelectList(oc_db.company.Where(c => c.status == "ACTIVE")
                                                 .OrderBy(c => c.name_1)
                                                  .GroupBy(c=>c.name_1)
                                   , "name_1", "name_1");

这是我收到的错误:

数据绑定: 'System.Data.Objects.ELinq.InitializerMetadata+Grouping'2[[System.String, mscorlib, 版本=4.0.0.0, 区域性=中性, PublicKeyToken=b77a5c561934e089],[OpsTicketing.Models.company, OpsTicketing, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' 不包含名称为"name_1"的属性。

如果我不使用GroupBy查询就可以工作,尽管有重复项。

GroupBy不会

提供基础类型的枚举。 它为您提供了IGrouping对象的枚举,其中包含一个Key字段(该字段为您提供该组的键值)和一个IEnumerable接口(允许您迭代该组的成员)。

如果您只需要按顺序排列name_1值的唯一列表,只需选择该字段并执行Distinct,然后执行OrderBy

ViewBag.companies = new SelectList(oc_db.company.Where(c => c.status == "ACTIVE")
                                                .Select(c=> new {c.name_1})
                                                .Distinct()
                                                .OrderBy(c => c.name_1)
                                   , "name_1", "name_1");

请注意,你可以在没有.Select()的情况下做到这一点,但你必须为你的company类定义"相等",这比这个练习的价值更麻烦。 这就是为什么Distinct以前不起作用的原因——因为你没有定义是什么让两家公司与众不同。

您必须在执行 GroupBy 之前解析查询,您可以通过调用 .ToList()

使用 .区别()?http://msdn.microsoft.com/en-us/library/bb348436.aspx

如果这就是您所需要的,应该可以工作。

您是否使用分组只是为了使列表与众不同? 如果是这样,请尝试:

.Where(c => c.status == "ACTIVE")
.OrderBy(c => c.name_1)
.Distinct()

相关内容

  • 没有找到相关文章

最新更新