At first,I do not use dynamic
,I just use the code like this,and it works well.
List<Student> result2 = StudentRepository.GetStudent(sex,age).ToList();
IQueryable rows2 = result2.AsQueryable();
But when I change it to dynamic
,it is wrong.
dynamic result = GetPeopleData(sex,age);
IQueryable rows = result.AsQueryable();
and I add a method like this,I build the project it show that List do not have the AsQueryable method.How to change it?
private dynamic GetPeopleData(int sex, int age)
{
if(sex>30)
return StudentRepository.GetStudent(sex,age).ToList();
else
return TeacherRepository.GetTeacher(sex, age).ToList();
}
AsQueryable()
is an extension method and those don't work on dynamic
.
Depending on what you want to do, there are several possible solutions:
Don't use dynamic
. Instead, make Student
and Teacher
implement a common interface (say, IPerson
) and use that:
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();
Call AsQueryable()
as a normal static method:
dynamic result = GetPeopleData(sex, age);
IQueryable rows = Queryable.AsQueryable(result);
BTW, checking whether sex is over 30 doesn't make any kind of sense to me. You should probably rethink that part of your design.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With