我有一个 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
,它应该适用于所有基本类型。
这假设您已经从服务器获得数据,现在需要处理它。
编辑:
如果你想创建一个查询,那么我找到了this !
显然,您正在寻找的东西如今已作为 Entity Framework 的一部分提供。
扩展方法可用,允许您使用返回 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();
关于c# - 按名称访问 DbSet 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17856940/