4

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

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

创建.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, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[OpsTicketing.Models.company, OpsTicketing, Version= 1.0.0.0,Culture=neutral,PublicKeyToken=null]]' 不包含名为“name_1”的属性。

如果我不使用GroupBy查询,尽管有重复项。

4

4 回答 4

5

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

如果您name_1只需要按顺序排列的唯一值列表,只需选择该字段并执行 aDistinct后跟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之前没有工作的原因——因为你没有定义是什么让两家公司与众不同。

于 2013-01-30T04:01:06.047 回答
2

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

于 2013-01-29T22:46:43.510 回答
1

使用 .Distinct() 怎么样? http://msdn.microsoft.com/en-us/library/bb348436.aspx

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

于 2013-01-29T22:49:39.817 回答
0

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

.Where(c => c.status == "ACTIVE")
.OrderBy(c => c.name_1)
.Distinct()
于 2013-01-29T22:48:42.157 回答