如何将带有属性名称的字符串转换为Entity框架存储表达式?

时间:2014-01-28 10:16:41

标签: c# entity-framework

我需要在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)) 

1 个答案:

答案 0 :(得分:1)

我已经在Nuget

中使用System.Linq.Dynamic中的扩展程序找到了解决方案

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

然后我可以在Select操作中使用字符串谓词:

DBContext.MyStatuses.Select("ModemStatus.Temperature");