【问题标题】:Entity Framework ORDER BY issue实体框架按问题排序
【发布时间】:2013-01-13 15:28:00
【问题描述】:

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

这有效,直到我输入GroupBy()

创建.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.ELinq.InitializerMetadata+Grouping`2[[System.String, mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089],[OpsTicketing.Models.company, OpsTicketing,版本=1.0.0.0,文化=中性,PublicKeyToken=null]]' 不包含名为“name_1”的属性。

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

【问题讨论】:

    标签: c# linq entity-framework exception-handling sql-order-by


    【解决方案1】:

    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 以前不起作用的原因 - 因为您没有定义是什么让两家公司与众不同。

    【讨论】:

    • 谢谢。这行得通。抱歉耽搁了,我在工作中忙于其他事情。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • ".Distinct()" 最后似乎取消了 ".OrderBy()"。如果我执行“.Distinct().OrderBy()”,则列表已排序,但不是不同的。
      【解决方案4】:

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

      【讨论】:

      • 我在 ".GroupBy()" 之前删除了 ".ToList()" 并收到相同的错误。
      猜你喜欢
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 2011-03-09
      相关资源
      最近更新 更多