Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按名称访问数据库集的属性_C#_Entity Framework - Fatal编程技术网

C# 按名称访问数据库集的属性

C# 按名称访问数据库集的属性,c#,entity-framework,C#,Entity Framework,我有一个DbSet 我想按名称访问其中一个属性 这可能吗 我基本上是在做一个泛型函数,这样对于我拥有的任何DbSet,我都可以指定一个列,并让它列出该列的值 您可以通过执行context.Set(T)从上下文中获取DbSet本身,但我不确定这些字段。我以前使用反射做过类似的事情 T item = context.Set(T).First(); string propName = "MyProperty"; object value = item.GetType().GetProperty(pro

我有一个
DbSet

我想按名称访问其中一个属性

这可能吗

我基本上是在做一个泛型函数,这样对于我拥有的任何DbSet,我都可以指定一个列,并让它列出该列的值


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

我以前使用反射做过类似的事情

T item = context.Set(T).First();
string propName = "MyProperty";
object value = item.GetType().GetProperty(propName).GetValue(item, null);
当然,请注意,您需要手动将值强制转换为特定类型,或者使用
ToString
,这在所有基本类型上都应该很好地工作

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

编辑:

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

显然,您现在所寻找的是实体框架的一部分

有一个扩展方法,允许您使用
。选择(“propertyName”)
,返回
iQuery
。请记住使用部分将
System.Linq.Dynamic
添加到您的

然后,可以通过指定参数的名称来创建select查询

List<object> data = (db.Set<SetType>()
                       .Where("propertyName == @0 && someOtherProperty == @1", propertyValue, someOtherPropertyValue)
                       .Select("propertyName") as IEnumerable<object>).ToList();
List data=(db.Set()
其中(“propertyName=@0&&someOtherProperty==@1”,propertyValue,someOtherPropertyValue)
.选择(“propertyName”)作为IEnumerable).ToList();
退房

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

var query = context.Set(Type.GetType("Person")).Select("Name");

酷,我刚刚试过这个,你认为性能影响会是什么?我假设它只会生成一条SQL语句,所以如果我想选择“Name”字段为“Hello”的所有实体,那么我可以只执行dbSet.Where(c=>c.GetType…..GetValue…==“Hello”),性能问题可以忽略?@SLC我找到了解决问题的方法-检查更新的答案!)好的,我已经尝试了第一个部分,看起来很有效,但是LINQtoEntities试图转换整个GetTypeGetProperty,但失败了。我猜是因为这部分需要在服务器端完成,并且只有结果应该进入LINQtoEntities
dbSet.Where(c=>c.GetType().GetProperty(propertyName).GetValue(c,null)==someString)
@SLC正如我所说,我已经编辑了答案-检查第二部分!)我明白了,我已经在我的解决方案中包含了动态linq dll,但我不确定如何像我上面的评论那样执行
where
子句。这里的通用上下文是什么?您能否显示您希望查询发起的方法的签名(以查看我们有什么类型的泛型类型参数)以及使用该方法的一行语句和预期结果?其概念是我有一个名为“books”的表,其中一个字段是“author”,我想在“author”列上执行搜索。我还有很多其他的表,我想对它们执行相同的搜索,所以我要创建一个通用方法,通过匹配列
“Author”
或我指定的任何列,在其中我说给我匹配的对象,例如
IEnumerable
。在.Net Core中,
context.Set()
不可用吗?