复杂类型的MVC WebGrid

本文关键字:WebGrid MVC 类型 复杂 | 更新日期: 2023-09-27 18:17:08

我正在创建一个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; }
    }

但是我得到:

系统。NotSupportedException:指定的类型成员'LastRequestStatus'在LINQ到实体中不被支持。只支持初始化式、实体成员和实体导航属性

我认为这是因为这个属性没有映射到db字段。是否有一种方法可以处理这种情况,或者我需要为此编写自定义排序?

提前感谢!

复杂类型的MVC WebGrid

试试这个:

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

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

读这个

LINQ To Entities不识别Last方法。真的吗?

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