2011-07-08 39 views
0

我有一個通用的知識庫爲我的EF。它工作得很好。但是今天我發現我需要得到的結果不是完全匹配的,而應該像SQL的'LIKE'那樣獲取任何具有匹配後綴或列前綴的內容。現在它所做的是平等運營商。任何人都可以抽搐這個應該像LIKE而不是平等的代碼嗎?我不知道如何做到這一點,因爲我是新來的EF,只是從網上覆制它。以下是我的代碼。如果沒有任何建議?謝謝。通用EF知識庫

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; 
    } 

回答

2

Like在表示LINQ到實體:

  • Contains("something")用於表示LIKE '%something%'
  • EndsWith("something")用於表示LIKE '%something'
  • StartsWith("something")用於表示LIKE 'something%'

所以,你的方法需要知道你想使用和創建正確的表達式來表示什麼類型的LIKE

  • context.YourEntities.Where(e => e.Column.Contains(key))
  • context.YourEntities.Where(e => e.Column.EndsWith(key))
  • context.YourEntities.Where(e => e.Column.StartsWith(key))