如何在c#中创建自定义Like Expression



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

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

但我需要一个类似的表达";表达式;用于类似sql的查询。但这种方法并不存在。

表达式。相等的定义如下:

public static BinaryExpression Equal(Expression left, Expression right)

因此,我需要创建一个名为Like的自定义方法。我该怎么做?我找不到。

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

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

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

您可以从DbFunctions中获得,类似于

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

下面也是类似函数的定义。这将有助于

//
// 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);

最新更新