MVC WebGrid的复杂类型

时间:2014-08-09 06:05:40

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

我正在创建一个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:指定的类型成员&#39; LastRequestStatus&#39; LINQ to Entities不支持。只有初始值设定项,实体成员和实体导航属性才是支持者

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

提前致谢!

2 个答案:

答案 0 :(得分: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?

答案 1 :(得分:0)

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