9

我有一个DbSet<T>

我想按名称访问它的属性之一。

这可能吗?

我基本上是在制作一个通用函数,因此对于我拥有的任何 DbSet,我可以指定一个列并让它列出该列的值。

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

4

2 回答 2

14

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

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

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

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

编辑:

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

显然,这些天您正在寻找的内容可作为实体框架的一部分提供。

提供了一种扩展方法,允许您使用.Select("propertyName")which 返回IQueriable。记得添加System.Linq.Dynamic到您的using部分。

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

List<object> data = (db.Set<SetType>()
                       .Where("propertyName == @0 && someOtherProperty == @1", propertyValue, someOtherPropertyValue)
                       .Select("propertyName") as IEnumerable<object>).ToList();
于 2013-07-25T11:57:05.637 回答
6

查看这篇关于动态 LINQ的文章。

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

var query = context.Set(Type.GetType("Person")).Select("Name");
于 2013-07-25T13:10:55.813 回答