【问题标题】:Generic EF repository通用 EF 存储库
【发布时间】:2011-07-08 05:26:28
【问题描述】:

我的 EF 有一个通用存储库。它工作得很好。但是今天我发现我需要得到不完全匹配的结果,而是应该像 SQL 的“LIKE”一样,它可以得到任何具有匹配后缀或列前缀的东西。现在它所做的是 Equal Operator。如何调整此代码以使其表现得像 LIKE 而不是相等?

public IList<TEntity> SelectManyByColumnKeywordLike(string Key, string columnName)
{

    // First we define the parameter that we are going to use the clause. 
    var xParam = Expression.Parameter(typeof(TEntity), typeof(TEntity).Name);
    MemberExpression leftExpr = MemberExpression.Property(xParam, columnName);
    Expression rightExpr = Expression.Constant(Key);
    BinaryExpression binaryExpr = MemberExpression.Equal(leftExpr, rightExpr);
    //Create Lambda Expression for the selection 
    Expression<Func<TEntity, bool>> lambdaExpr =
    Expression.Lambda<Func<TEntity, bool>>(binaryExpr,
    new ParameterExpression[] { xParam, });
    //Searching ....
    IList<TEntity> resultCollection = ((IADRRepository<TEntity, TContext>)this).SelectAll
                (new Specification<TEntity>(lambdaExpr));
    if (null != resultCollection && resultCollection.Count() > 0)
    {
        //return valid single result 
        return resultCollection;
    }//end if 
    return null;
}

【问题讨论】:

    标签: .net entity-framework linq sql-like


    【解决方案1】:

    Like 在 linq-to-entities 中表示为:

    • Contains("something") 代表LIKE '%something%'
    • EndsWith("something") 代表LIKE '%something'
    • StartsWith("something") 代表LIKE 'something%'

    所以你的方法需要知道你想使用什么类型的LIKE并创建正确的表达式来表示:

    • context.YourEntities.Where(e =&gt; e.Column.Contains(key))
    • context.YourEntities.Where(e =&gt; e.Column.EndsWith(key))
    • context.YourEntities.Where(e =&gt; e.Column.StartsWith(key))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 2012-08-11
      • 2017-11-07
      • 2019-05-24
      相关资源
      最近更新 更多