我正在创建一个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字段。有没有办法处理这种情况开箱即用或我需要为此编写自定义排序?
提前致谢!
答案 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根据需要处理分页,无需干预。所有这些都可以在视图+控制器中完成,而不需要客户端脚本(通常我没有问题,但我认为这样更可读,特别是如果我在几个月内看到这个代码)。