我有一个打开了服务器端过滤的 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";
}
}
}
您可以使用扩展方法并将其附加到类。
该方法应该使用反射从对象中检索属性。
以下是指针:
一旦它起作用,您只需设置和/或获取属性的值。
这GetProperty()
上面的方法只返回PropertyInfo
目的。
要获取或设置该值,您必须使用适当的方法PropertyInfo
.
我不会暴露PropertyInfo
因为它会ruin魔术。
最好必须扩展方法,然后:
T GetPropertyByName<T>(string name);
SetPropertyByName<T>(string name, T value);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)