我有一个DbSet<T>
我想按名称访问它的属性之一。
这可能吗?
我基本上是在制作一个通用函数,因此对于我拥有的任何 DbSet,我可以指定一个列并让它列出该列的值。
您可以DbSet
通过这样做从上下文中获取本身,context.Set(T)
但我不确定这些字段。
我有一个DbSet<T>
我想按名称访问它的属性之一。
这可能吗?
我基本上是在制作一个通用函数,因此对于我拥有的任何 DbSet,我可以指定一个列并让它列出该列的值。
您可以DbSet
通过这样做从上下文中获取本身,context.Set(T)
但我不确定这些字段。
不久前我使用反射做了类似的事情。
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();
查看这篇关于动态 LINQ的文章。
使用提供的代码,我能够编写一个 LINQ to Entities 查询,如下所示:
var query = context.Set(Type.GetType("Person")).Select("Name");