输入会员"年龄"使用ODataQueryOptions时,LINQ to Entities不支持

时间:2017-05-26 13:05:05

标签: c# linq

我们在应用程序中不断选择这样的数据:

 myDummyService.getAll().Where(x => x.Id > 1000).Select(x => new DummyDto() {
     Id = x.Id,
     Name = x.Name
 };

这将返回IQueryableDummyDto如下所示:

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
               })
    });

任何人都知道为什么?

2 个答案:

答案 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;}