起初,我不使用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
。而是使Student
和Teacher
实现一个公共(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/