起初,我不使用dynamic,我只使用这样的代码,并且效果很好。

  List<Student> result2 = StudentRepository.GetStudent(sex,age).ToList();
  IQueryable rows2 = result2.AsQueryable();

但是,当我将其更改为dynamic时,这是错误的。
 dynamic result = GetPeopleData(sex,age);
 IQueryable rows = result.AsQueryable();

我添加了一个这样的方法,我构建了一个项目,显示List没有AsQueryable方法。如何更改它?
 private dynamic GetPeopleData(int sex, int age)
    {
        if(sex>30)
            return StudentRepository.GetStudent(sex,age).ToList();
        else
            return TeacherRepository.GetTeacher(sex, age).ToList();
    }

最佳答案

AsQueryable() those don't work on dynamic 的扩展方法。

根据您要执行的操作,有几种可能的解决方案:

  • 不要使用dynamic。而是使StudentTeacher实现一个公共(public)接口(interface)(例如IPerson)并使用该接口(interface):
    private IReadOnlyList<IPerson> GetPeopleData(int sex, int age)
    {
        if (sex > 30)
            return StudentRepository.GetStudent(sex, age).ToList();
        else
            return TeacherRepository.GetTeacher(sex, age).ToList();
    }
    
    …
    
    var result = GetPeopleData(sex, age);
    IQueryable<IPerson> rows = result2.AsQueryable();
    
  • 调用AsQueryable()作为普通的静态方法:
    dynamic result = GetPeopleData(sex, age);
    IQueryable rows = Queryable.AsQueryable(result);
    

  • 顺便说一句,检查性别是否超过30岁对我来说没有任何意义。您可能应该重新考虑设计的那部分。

    关于c# - 当我使用 'dynamic'来使用AsQueryable方法时,我的代码之间有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28892054/

    10-17 00:48