我有一个Kendo网格,打开了服务器端过滤 . 要过滤的字段作为字符串传递 . 例如,我想过滤“SampleId” . 现在,我需要编写一个LINQ to Entities查询,该查询可以使用强类型属性SampleId进行过滤 . 例如:
db.Cases.Where(x=>targetlist.Contains(x.SampleId))
其中targetlist是过滤器中的项目列表 .
那么,实际上,有没有办法编写一个查询,以便“SampleId”可以直接转换为Case.SampleId?
我尝试过反射并使用了GetProperty和GetValue,LINQ to Entities不喜欢它 .
任何建议将不胜感激!
编辑(由原始海报srinaik2020的pid):
@zaitsman:这是在下面的评论中发布的代码,是基于接受的答案的问题的实际解决方案 .
public static class MyExtensions
{
public static string GetPropertyByName(this CaseV case1, string name)
{
var x = typeof (CaseV).GetProperty(name).GetValue(case1);
if (x != null)
{
return x.ToString();
} else {
return "none";
}
}
}
2 回答
您可以使用扩展方法并将其附加到类 .
该方法应使用反射从对象中检索属性 .
以下是指针:
Extension methods
GetProperty()
一旦这个工作,你只需要设置和/或获取属性的值 . 上面的
GetProperty()
方法只返回PropertyInfo
对象 . 要获取或设置值,您必须使用PropertyInfo
的相应方法 .我不会暴露
PropertyInfo
因为它会破坏魔法 .最好有扩展方法,然后:
如果你喜欢表达式,你可以使用它们来获取属性的值(取自我在LinqPad中制作的一些帮助器,因此它可能不是完整的代码):
然后呢