C# 实体框架按发行顺序
我正在尝试使用实体框架构建我的第一个MVC4应用程序。我要找的就是创建一个下拉列表,每个选项的值和文本都设置为相同的值 这是有效的,直到我加入C# 实体框架按发行顺序,c#,linq,entity-framework,exception-handling,sql-order-by,C#,Linq,Entity Framework,Exception Handling,Sql Order By,我正在尝试使用实体框架构建我的第一个MVC4应用程序。我要找的就是创建一个下拉列表,每个选项的值和文本都设置为相同的值 这是有效的,直到我加入GroupBy() Create.cshtml @Html.DropDownList("CustomerName",(SelectList)ViewData["companies"]); ticketController.cs ViewBag.companies = new SelectList(oc_db.company.Where(c => c
GroupBy()
Create.cshtml
@Html.DropDownList("CustomerName",(SelectList)ViewData["companies"]);
ticketController.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.Elink.InitializerMetadata+分组'2[[System.String,
mscorlib,版本=4.0.0.0,区域性=中性,
PublicKeyToken=b77a5c561934e089],[optsticketing.Models.company,
选项粘贴,版本=1.0.0.0,区域性=中性,PublicKeyToken=null]'
不包含名为“name_1”的属性
如果我不使用
GroupBy
,则查询可以工作,尽管存在重复项。您必须在执行GroupBy之前解析查询,您可以通过调用.ToList()
来完成此操作。您使用分组只是为了使列表与众不同吗?如果是,请尝试:
.Where(c => c.status == "ACTIVE")
.OrderBy(c => c.name_1)
.Distinct()
使用.Distinct()怎么样?
如果这是您所需要的,则应该可以使用。
GroupBy
不提供基础类型的枚举。它为您提供了一个i分组
对象的枚举,其中包含一个Key
字段,该字段为您提供该组的键值,以及一个IEnumerable
接口,该接口允许您迭代该组的成员
如果您只需要一个按顺序排列的name\u 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()
的情况下执行此操作,但必须为您的公司
类定义“相等”,这比本练习所需的麻烦多了。这就是为什么Distinct
以前不起作用的原因-因为您没有定义两个公司的不同之处。我在“.GroupBy()”之前删除了“.ToList()”,并收到了相同的错误。“.Distinct()”最后似乎取消了“.OrderBy()”。如果我使用“.Distinct().OrderBy()”,则列表将被排序,但不是Distinct。谢谢。这起作用了。很抱歉耽搁了,我在工作中遇到了其他事情。