按名称访问DbSet的属性
本文关键字:属性 DbSet 访问 | 更新日期: 2023-09-27 18:24:57
我有一个DbSet<T>
我想按名称访问其中一个属性。
这可能吗?
我基本上是在制作一个泛型函数,这样对于我拥有的任何DbSet,我都可以指定一列,并让它列出该列的值。
您可以通过执行context.Set(T)
从上下文中获取DbSet
本身,但我不确定字段。
我不久前使用反射做了类似的事情。
T item = context.Set(T).First();
string propName = "MyProperty";
object value = item.GetType().GetProperty(propName).GetValue(item, null);
当然,请注意,您要么需要手动将值强制转换为特定类型,要么使用ToString
,这应该在所有基本类型上都能很好地工作。
这假设您已经拥有来自服务器的数据,现在需要对其进行处理
编辑:
如果你想创建一个查询,那么我找到了这个!
显然,您正在寻找的东西现在已经作为实体框架的一部分提供了。
提供了一个扩展方法,允许您使用返回IQueriable
的.Select("propertyName")
。请记住将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到实体的查询,如下所示:
var query = context.Set(Type.GetType("Person")).Select("Name");