不存在 属性 或类型为动态 class 的字段

No property or field exists in type dynamic class

我正在尝试为我的报告创建动态查询。 我的查询 returns 使用 .select(selectstringquery).where(wherestringquery). 的 IEnumerable select 以及字符串根据我需要的内容和时间在不同情况下有所不同。

string   selectstringquery = "student_fname, student_lname"
string wherestringquery = "student_lname='joe'";

var test = (from s in students).select(selectstringquery).where(wherestringquery); //this works well

wherestringquery = "student_isRegistered=false";
var test = (from s in students).select(selectstringquery).where(wherestringquery) //this fails coz isRegistered is a valid proerpty but not is NOT in select query. 

It throws an error No property or field 'student_isRegistered' exists in type '<>f__AnonymousType337`14'

但是如果我把 where 放在 linq

例如

 (from s in students
where s_isRegistered=false).select(selectstringquery) 

如何在不将列包含在 select 查询中的情况下使其工作?原因是我想在所有报告中重复使用查询,有些报告不需要该过滤器。

此外,在这种情况下,我使用

"if else " 确定 wherestringquery 是否不为空,否则我使用与上面完全相同的查询,但没有 .where(wherestringquery)。是否有可能使用 .where() 即使 wherestringquery 为空?我试着写 .where(true) 但它抛出异常。

谢谢。

您正试图在 select 通过 select 子句减少列数后应用 where 子句。只需在 selecting 列之前执行 where 例如

var test = (from s in students).where(wherestringquery).select(selectstringquery);