2017-11-29 6 views
0

두 엔터티간에 필터가 필요합니다. 두 테이블 있음 1. 사용자 2.Product 사용자 테이블이있는 제품 맵.두 엔티티가있는 동적 where 절

동적 필터를 만들 예정입니다.

'테스트'제품이있는 모든 사용자를 찾아야합니다.

조건 : userFilter 개수가 0이면 모든 테스트 제품이 존경받는 사용자에게 필요합니다.

userFilter가 있고 productFilter가있는 경우 아래 코드가 작동하지만 userFilter가없고 productFilter가있는 경우 0 행을 반환합니다. 테스트 제품을 가진 사용자를 어떻게 찾을 수 있습니까? ?

다음은 나의 코드입니다. 내가 올바른 이해한다면

public IHttpActionResult GetFilter() 
     { 
      var userFilters = new List<Filter>() 
      { 
       new Filter { PropertyName = "Username" , 
        Operation = Op .Equals, Value = "Karan" }, 
      }; 

      var productfilter = new List<Filter>() 
      { 
       new Filter { PropertyName = "Name" , 
        Operation = Op .Equals, Value = "Test product" } 
      }; 

      Func<User, bool> deleg = x => true; 
      Func<Product, bool> delegProduct = x => true; 

      if (userFilters.Count > 0) 
      { 
       deleg = ExpressionBuilder.GetExpression<User>(userFilters).Compile(); 
      } 

      if (productfilter.Count > 0) 
      { 
       delegProduct = ExpressionBuilder.GetExpression<Product>(productfilter).Compile(); 
      } 

      var resultt = _localmarketEntities.Users.Where(deleg) 
       .Select(x => new 
       { 
        x.Id, 
        x.Username, 
        Product = x.Products.Where(delegProduct).Select(y => new 
        { 
         y.Id, 
         y.Name 
        }).ToList() 
       }) 
       .ToList(); 

      return Ok(resultt); 
     } 
+1

확실하지 때 테스트 제품이있는 모든 사용자가 필요합니다. 메모리에서 모든 필터링을 수행하지 않는 한? 어쨌든 당신이 코드에서'.Where (deleg)'을 제거하면, 필터가없는 것과 같아야하지만, 여전히 아무것도 되돌려주지 않을까요? – Mant101

+0

userFilter가 있으면 deleg을 사용해야합니다. 그래서 거기에 있습니다. 그래서 제거하면 userFilter로 필터링 할 수 없습니다. 이해가 되니? –

+0

"userFilter"가 없다는 것을 의미합니까? – NetMage

답변

0

, 당신이이 모든 Linq는 객체에 물건 엔티티 프레임 워크 태그 이유 userFiler 카운트가 0

List<User> res; 
var user = _localmarketEntities.Users.Where(deleg).ToList(); 
if (user.Count == 0) { 
    res = _localmarketEntities.Products.Where(delegProduct).Select(q => new User() { 
     Id = q.Id, 
     Username = q.Username, 
     Product = q 
    }).ToList(); 
} 
else { 
    res = _localmarketEntities.Users.Where(deleg) 
      .Select(x => new 
      { 
       x.Id, 
       x.Username, 
       Product = x.Products.Where(delegProduct).Select(y => new 
       { 
        y.Id, 
        y.Name 
       }).ToList() 
      }) 
      .ToList(); 
}