类型动态类中不存在属性或字段

时间:2015-10-18 05:25:29

标签: c# linq dynamic predicate anonymous

我正在尝试为报告创建动态查询。 我的查询返回使用.select(selectstringquery).where(wherestringquery).的IEnumerable。选择和字符串在差异的情况下根据我需要的时间而变化。

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. 
  

它会抛出错误没有属性或字段' student_isRegistered'存在   在类型'<> f__AnonymousType337`14'

但如果我把它放在linq里面的地方

那就行了

离。

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

您正在尝试通过select子句选择较少的列后应用where子句。只需在选择列之前执行操作,例如

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