2016-07-14 2 views
0

주어진 엔터티에 Where(x =>x. ...)Include(x => x.RelatedEntity) 및를 적용 할 수있는 방법이 필요합니다. 이 같은 뭔가 :람다 식을 사용하여 엔티티 프레임 워크 엔터티에 필터를 동적으로 적용하십시오.

public List<TEntity> ApplyFilter<TEntity>(TEntity entity, 
              List<filters> filters /* List of filters: 'filters' */) 
              where TEntity : BaseEntity 
    { 
     using (var db = new MyDbContext()){ 
     var query = db.Set<TEntity>().AsQuaryable; 
    //apply filters to 'query' 
     query.include(/*multiple related entities*/); 
     query.applyfilters(/*filters*/); 

     return query.ToList(); 
    } 
    } 

그리고 내가/필터링 람다 표현식을 포함 할 필요가 무엇을 전달해야합니다.

참고 : 나는 어떻게 할 수 있는지에 관해 많이 조사했지만 정말 아무것도 찾을 수 없었습니다. 저는 C#/entity-framework의이 부분을 처음 접했고 검색 할 키워드를 알지 못했습니다.

도움을 주셔서 감사합니다.

답변

1

당신이 방법을 사용하려면 LINQ 표현

public List<TEntity> ApplyFilter<TEntity>(   
     Expression<Func<TEntity, bool>> filter, 
     Expression<Func<TEntity, object>> orderBy, 
     params Expression<Func<TEntity, object>>[] includes) where TEntity : BaseEntity 
    { 
     using (var db = new MyDbContext()) 
     { 
      var query = db.Set<TEntity>().AsQueryable(); 
      query = query.Where(filter); 
      query = query.OrderBy(orderBy); 

      if (includes != null) 
      { 
       foreach (var include in includes) 
       { 
        query = query.Include(include); 
       } 
      } 

      return query.ToList(); 
     } 
    } 

를 사용하는 것이 좋습니다 : 곳, 예를 들어있는 필터를 사용하여,

 ApplyFilter<TestObject>(
      x => x.Prop1 == "foo", 
      x => x.Prop2, 
      x => x.Prop3, x => x.Prop4); 
이 중 일부는 정확
+0

, 표현, 그러나 orderby는 일하기 위해 다른 것을 사용해야합니다. 타입은'Func , IOrderedQueryable > orderby'이어야하며 사용은'query = orderby (query)'가되어야합니다. –

0

이같은 내용?

var result = Repository.PurchaseProposalItem.GetDbSet(); 

     if (filters.FilterByBrand) result = result.Where(p => p.GS_Product.GS_ProductBrand.PBr_Id == filters.BrandId); 
     if (filters.FilterByFamily) result = result.Where(p => p.GS_Product.GS_ProductFamily.PFa_Id == filters.FamilyId); 
     if (filters.FilterBySubFamily) result = result.Where(p => p.GS_Product.GS_ProductSubFamily.PSu_Id == filters.SubFamilyId); 
     if (filters.FilterByProductType) result = result.Where(p => p.GS_Product.Pro_Type == filters.ProductTypeEnum); 

    return result; 
관련 문제