我们在应用程序中不断选择这样的数据:
myDummyService.getAll().Where(x => x.Id > 1000).Select(x => new DummyDto() {
Id = x.Id,
Name = x.Name
};
这将返回IQueryable
,DummyDto
如下所示:
public class DummyDto {
public int Id {get;set;}
public string Name {get;set;}
public int Age {get;set;}
}
只要我们使用ODataQueryOptions
来实现分页,就会导致错误:
The specified type member "Age" is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.
"年龄"只是DummyDto的另一个属性,我们没有在上面的代码中选择。
我们实现这样的分页:
public PageResult<DummyDto> GetAll(ODataQueryOptions<DummyDto> queryOptions) {
var result = queryOptions.applyTo(
myDummyService.getAll().Where(x => x.Id > 1000).Select(x => new DummyDto() {
Id = x.Id,
Name = x.Name
})
});
return new PageResult<DummyDto>(results as IEnumerable<DummyDto>);
如果我们将查询更改为此,则错误消失。
public PageResult<DummyDto> GetAll(ODataQueryOptions<DummyDto> queryOptions) {
var result = queryOptions.applyTo(
myDummyService.getAll().Where(x => x.Id > 1000).Select(x => new DummyDto() {
Id = x.Id,
Name = x.Name,
Age = null // simply set the property to null, because we don't want / need it in this case
})
});
任何人都知道为什么?
答案 0 :(得分:0)
据我所知,queryOptions.applyTo()
正在尝试将该选项应用于该课程的每个属性,但不能与Age
一起使用,因为它未连接到数据库对象。
我们刚刚创建一个新课程,仅此而已?
public class DummyDto2 {
public int Id {get;set;}
public string Name {get;set;}
}
答案 1 :(得分:0)
您的模型中的年龄不是空值,并且强制完全指定空值,这就是获取错误的原因。
声明你的房产就像这个模型
public int? Age {get;set;}