按名称访问DbSet的属性

时间:2013-07-25 11:37:23

标签: c# entity-framework

我有DbSet<T>

我想按名称访问其中一个属性。

这可能吗?

我基本上是在创建一个泛型函数,所以对于我所拥有的任何DbSet,我可以指定一个列并让它列出该列的值。

您可以通过DbSet从上下文中获取context.Set(T),但我不确定这些字段。

2 个答案:

答案 0 :(得分:11)

我使用反射做了类似的事情。

T item = context.Set(T).First();
string propName = "MyProperty";
object value = item.GetType().GetProperty(propName).GetValue(item, null);

当然请注意,您需要手动将值转换为特定类型,或使用ToString,这应该适用于所有基本类型。

这假设您已经拥有来自服务器的数据,现在需要对其进行处理。

修改

如果您想创建一个查询,那么我找到了this

显然,您所寻找的内容最近已作为实体框架的一部分提供。

可以使用扩展方法,使用.Select("propertyName")返回IQueriable。请务必将System.Linq.Dynamic添加到using部分。

然后,您可以通过指定参数的名称来创建选择查询。

List<object> data = (db.Set<SetType>()
                       .Where("propertyName == @0 && someOtherProperty == @1", propertyValue, someOtherPropertyValue)
                       .Select("propertyName") as IEnumerable<object>).ToList();

答案 1 :(得分:5)

查看this article on Dynamic LINQ

使用提供的代码,我能够编写LINQ to Entities查询,如下所示:

var query = context.Set(Type.GetType("Person")).Select("Name");