gpt4 book ai didi

c# - Entity Framework DbSet 动态查询

转载 作者:太空宇宙 更新时间:2023-11-03 13:23:21 29 4
gpt4 key购买 nike

我正在从传入的类型创建 DbSet,我需要查询数据库以获取动态字段和值。使用泛型我会使用带有 lambda 表达式的 where 函数。这可以通过如下创建的标准 dbSet 实现吗?

DbSet table = dataContext.Set(EntityType);
PropertyInfo propertyInfo = EntityType.GetProperty(PropertyName);

// Expression: "entity"
ParameterExpression parameter = Expression.Parameter(EntityType, "entity");

// Expression: "entity.PropertyName"
MemberExpression propertyValue = Expression.MakeMemberAccess(parameter, propertyInfo);

// Expression: "value"
object convertedValue = Convert.ChangeType(value, propertyInfo.PropertyType);
ConstantExpression rhs = Expression.Constant(convertedValue);

// Expression: "entity.PropertyName == value"
BinaryExpression equal = Expression.Equal(propertyValue, rhs);

// Expression: "entity => entity.PropertyName == value"
LambdaExpression lambda = Expression.Lambda(equal, parameter);

现在需要查询表获取数据。

最佳答案

有一个名为“System.Linq.Dynamic”的 nuget 包。

http://dynamiclinq.codeplex.com/

此包允许您使用字符串形成针对 DbSet 的语句,如下所示:

myContext.MyDbSet.Where("PropertyName == @0", "aValue");

可以使用您在问题中建议的表达式来做到这一点,但是这个库可以完成所有繁重的工作。

我在我之前的一个项目中使用它并取得了巨大成功。

关于c# - Entity Framework DbSet 动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23342574/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com