我需要在Entity Framework中使用带有属性名称的字符串从DB中选择特定列。我使用反射来传递复杂的属性:
public static Object GetPropValue(this Object obj, String name)
{
foreach (String part in name.Split('.'))
{
if (obj == null) { return null; }
Type type = obj.GetType();
PropertyInfo info = type.GetProperty(part);
if (info == null) { return null; }
obj = info.GetValue(obj, null);
}
return obj;
}
然后我尝试将其传递给Select,就像这样:
string propertyName = "ModemStatus.Temperature" // This is sent in http request
DBContext.MyStatuses.Select(x => x.GetPropValue(propertyName))
但我得到运行时异常,GetPropValue无法转换为存储表达式,我理解但我不知道如何解决它。有什么想法吗?
编辑:返回类型将始终是双打的集合
ICollection<double> values = DBContext.MyStatuses.Select(x => x.GetPropValue(propertyName))
答案 0 :(得分:1)
我已经在Nuget
中使用System.Linq.Dynamic中的扩展程序找到了解决方案然后我可以在Select操作中使用字符串谓词:
DBContext.MyStatuses.Select("ModemStatus.Temperature");