【问题标题】:MVC WebGrid of complex type复杂类型的 MVC WebGrid
【发布时间】:2014-10-02 15:44:27
【问题描述】:

我正在创建一个 webgrid。我的专栏之一是集合复杂类型:

[Table("RequestStatus",Schema="dbo")]
public class RequestStatus
{
    [Key]
    public int Id { get; set; }

    public string Status { get; set; }
}

在我的实体中:

    public virtual ICollection<RequestStatus> RequestStatuses { get; set; }

在我的 webgrid 中,我希望能够以类似于此的方式按此属性进行排序:

   RequestStatuses.Last().Status

我在我的实体中创建了一个只读属性:

    [NotMapped]
    public string LastRequestStatus
    {
        get { return this.RequestStatuses.Last().Status; }
    }

但我明白了:

System.NotSupportedException:LINQ to Entities 不支持指定的类型成员“LastRequestStatus”。仅支持初始化器、实体成员和实体导航属性

我认为这是因为此属性未映射到 db 字段。有没有办法开箱即用地处理这种情况,或者我需要为此编写自定义排序?

提前致谢!

【问题讨论】:

    标签: c# asp.net-mvc entity-framework webgrid


    【解决方案1】:

    试试这个:

    get { return this.RequestStatuses.ToList().Last().Status; }
    

    get { return this.RequestStatuses.OrderByDescending(ee=>ee.YourPropery).First().Status; }
    

    然后阅读这篇文章

    LINQ To Entities does not recognize the method Last. Really?

    【讨论】:

    • 那行不通。如果我有一个未映射到实体的简单字段,它将不起作用。例如: public string SomeProp { get;放;}。给出同样的错误。
    【解决方案2】:

    我创建了某种自定义排序。 当我在查询字符串中发出 sort={propery which doesn't exist} 时,webgrid 不会进行排序,而是按原样给出结果。 如果我编辑此列的标题以发出带有 _LastRequestStatus 的查询字符串(在我的情况下),我检查控制器是否 querystring["sort"] 等于此字符串 (_LastRequestStatus) ,执行适当的排序 (ASC,DESC -查询字符串中的 sortdir),然后像以前一样将该列表传递给视图。 从那里 webgrid 无需干预即可根据需要处理分页。一切都可以在视图+控制器中完成,而不需要客户端脚本(通常我对此没有问题,但我认为这种方式更具可读性,特别是如果我在几个月后看到这段代码)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多