簡體   English   中英

C#Linq通用搜索

[英]C# Linq generic search

我正在嘗試為基礎存儲庫服務編寫一種方法。 我的想法是我想要一個可以用於簡單實體類型的泛型類,也可以為更復雜的實體覆蓋。 我正在編寫一種搜索方法,其想法是,對於簡單實體,將存在一個組件,該組件將具有一個或多個屬性,且字段與該實體的屬性相匹配。 如果找到了這些,則構建一個where linq語句來查詢它。 這是我到目前為止的內容:

  public IQueryable<T> GetAll()
  {
     return entityRepository.GetAll();
  }

  public IQueryable<T> Search(IBaseComponent component)
  {
     IQueryable<T> all = GetAll();
     Type type = typeof(T);
     Type componentType = component.GetType();

     foreach (var componentProperty in componentType.GetProperties())
      {
        foreach (var property in type.GetProperties())
        {
           if (property.Name.Equals(componentProperty.Name))
           {
              var value = componentProperty.GetValue(component);

              ParameterExpression gpe = Expression.Parameter(property.DeclaringType, "a");
              var selector = Expression.Equal(Expression.Property(gpe, property), Expression.Constant(value));
              var keySelector = Expression.Lambda(selector, gpe);

              var t = all.Where(keySelector);

              break;
           }
        }
      }

     var test = all.ToArray();

     return all;
  }

顯然,這目前僅在理論上適用於一種財產。 服務本身具有類型參數(因此其BaseService<T> )。

我遇到的問題是它將無法編譯。 all.Where(keySelector)給出錯誤:

    'System.Linq.IQueryable<T>' does not contain a definition for 'Where' and the best extension method overload 'System.Linq.Enumerable.Where<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,int,bool>)' has some invalid arguments

我不確定這里出什么問題,據我所知,它們的類型都是正確的。 我想念什么? 還是我想做些不可能的事情?

即使具體類型為Expression<Func<T, bool>> Expression.Lambda返回類型也為LambdaExpressionLambdaExpressionExpression<T>的非通用基類)

@Euphoric的評論很明顯,而var關鍵字是這里的問題,因為沒有它,此錯誤的原因就很明顯了。

正確的代碼是這樣的:

var keySelector = (Expression<Func<T, bool>>)Expression.Lambda(selector, gpe);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM