【问题标题】:How to create custom Like Expression in c#?如何在 C# 中创建自定义 Like 表达式?
【发布时间】:2021-06-24 06:42:01
【问题描述】:

我正在创建一个字典以在我的应用程序中使用,如下所示。这是实体框架。

var expressions = new Dictionary<string, Func<Expression, Expression, Expression>>
{
    { "is equal to", Expression.Equal },
    { "greater then", Expression.GreaterThan }
};

但我需要一个 Like 表达式 "Expression.Like" 用于类似 sql 的查询。但是这个方法不存在。

Expression.Equal 定义如下:

public static BinaryExpression Equal(Expression left, Expression right)

所以我需要创建一个名为 Like 的自定义方法。我怎样才能做到这一点?我找不到。

public static BinaryExpression Like(Expression left, Expression right)
{
   ???
}

【问题讨论】:

  • 这是什么味道的Linq?您是在使用 Linq to objects、Entity Framework 还是其他东西?
  • 我正在使用这个作为实体框架,更新了帖子

标签: c# .net entity-framework linq entity-framework-6


【解决方案1】:

不确定这是否是您要查找的内容,但您可以创建一个扩展方法。

public static class MyExtensions
{
    public static BinaryExpression Like(this BinaryExpression obj, Expression left, Expression right)
    {
        //code here...
    }
}

【讨论】:

  • 我需要 SQL like 或 string Ccntains 方法实现。
  • 不确定你想要完成什么,你能提供一个你的字典的用例吗?也许您只想使用 .Contains()?看看this answer
【解决方案2】:

你可以从 DbFunctions 得到这个,类似这样的东西

var methodInfo = typeof(DbFunctions).GetMethod(nameof(DbFunctions.Like), new Type[] { typeof(string) });

下面还有like函数的定义。会有帮助的

        //
        // Summary:
        //     When used as part of a LINQ to Entities query, this method invokes the canonical
        //     Like EDM operator to match an expression.
        //
        // Parameters:
        //   searchString:
        //     The string to search.
        //
        //   likeExpression:
        //     The expression to match against.
        //
        // Returns:
        //     True if the searched string matches the expression; otherwise false.
        //
        // Remarks:
        //     You cannot call this function directly. This function can only appear within
        //     a LINQ to Entities query. This function is translated to a corresponding function
        //     in the database.
        [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "string")]
        [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "searchString")]
        [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId = "likeExpression")]
        public static bool Like(string searchString, string likeExpression);

【讨论】:

  • DbFuctions 是第三方还是 EF 工具?
  • DbFunctions 来自 System.Data.Entity 及其实体框架的一部分
猜你喜欢
  • 2017-12-07
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 2011-08-30
  • 2016-12-29
相关资源
最近更新 更多