c# - Entity Framework 4 : convert a string condition to a lambda expression?

标签 c# c#-4.0 entity-framework-4

我想接受来自客户端的 where 条件字符串数组,例如 field == value。 如果能创建一个可以在构造函数中接受字符串并输出一个 lambda 表达式来表示 Where 子句的规范对象,那就太好了。例如,我可以执行以下操作:

var myCondition = new Specification<Product>( myStringArrayOfConditions); 
var myProducts = DB.Products.Where( myCondition);

如何将 "name == Jujyfruits" 变成
DB.Products.Where(p => p.name == "JujyFruits")

最佳答案

你可以使用

  • 反射(reflection)获得属性(property)Product.name来自字符串 name
  • LINQ Expression手动创建 lambda 表达式的类。

请注意,以下代码示例仅适用于 Equals (==)操作。但是,也很容易推广到其他操作(按空格拆分,解析运算符并选择适当的表达式而不是 Expression.Equal )。

    var condition = "name == Jujyfruits";

    // Parse the condition
    var c = condition.Split(new string[] { "==" }, StringSplitOptions.None);
    var propertyName = c[0].Trim();
    var value = c[1].Trim();

    // Create the lambda
    var arg = Expression.Parameter(typeof(Product), "p");
    var property = typeof(Product).GetProperty(propertyName);
    var comparison = Expression.Equal(
        Expression.MakeMemberAccess(arg, property),
        Expression.Constant(value));
    var lambda = Expression.Lambda<Func<Product, bool>>(comparison, arg).Compile();

    // Test
    var prod1 = new Product() { name = "Test" };
    var prod2 = new Product() { name = "Jujyfruits" };
    Console.WriteLine(lambda(prod1));  // outputs False
    Console.WriteLine(lambda(prod2));  // outputs True

关于构造函数:自 Func<T, TResult>是密封的,你不能从中得到。但是,您可以创建一个 implicit conversion operator翻译Specification<T>进入Func<T, bool> .

关于c# - Entity Framework 4 : convert a string condition to a lambda expression?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5853568/

相关文章:

C# - WPF - 防止更新绑定(bind)的焦点文本框

c# - 响应中缺少 header 'Sec-WebSocket-Protocol'

c# - 无法将类型为 '<XYPairsInRange>d__8' 的对象转换为类型 'IXYPair'

c# - 目录大小改变事件

c# - Visual Studio 和 Windbg : which one is better to debug large scale managed application

c# - 关于绑定(bind)到非属性(即字段)的官方说法是什么?

c# - 按名称访问动态对象属性

linq - 如果您使用实体投影,您会获得 IQueryable 的好处吗?

c# - ReferentialConstraint 中的依赖属性映射到存储生成的列

entity-framework-4 - 显式加载导航属性