c# - 按名称访问 DbSet 的属性

标签 c# entity-framework

我有一个 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/

相关文章:

c# - .NET 正则表达式无法识别的分组构造

javascript - 如何从 Controller 传递对象列表以查看和填充 google.visualization.DataTable()?

c# - 从 C# 应用程序调试 C .dll 文件

c# - 使用 devart dotConnect 调用 Oracle 存储过程

asp.net-mvc - 无法使用 MiniProfiler 到达一垒

c# - C# 中的 HTTPS 代理服务器

C# Linq 基于日期的加权平均值

sql-server - 为什么这个 EF 查询需要这么长时间?

entity-framework - 您在 Entity Framework 中发现的最烦人的功能(或缺少功能)是什么?

c# - 如何使用 Linq to Entity 获取最大 ID?