2017-03-28 2 views
0

내 ApiController에서 검색 기능을 구현하려고합니다. 내가 뭘 하려는지 : "나이키 2016" 같은 단일 문자열을 입력으로 소요됩니다 클라이언트에 대한 API를 만들 수 있습니다. 그리고 내 API는 "Nike"브랜드"2016"년에서 기록을 반환해야합니다.엔티티 프레임 워크로 스마트 검색 구현

다음은 내 모델 클래스입니다. Entity Framework를 사용하고 있습니다.

class ProductEntity 
    { 
     public int Year { get; set; } 
     public string TAGS { get; set; } 
     public Dimension Dimension { get; set; } 
     public int Rating { get; set; } 
     public string UserId { get; set; } 
     public string Brand { get; set; } 
     public double NumberOfFloors { get; set; } 
     public string CostOfBuilding { get; set; } 
    } 

    class Dimension 
    { 
     public double length { get; set; } 
     public double width { get; set; } 
    } 

나는 모든 열에서 키워드로 검색 "또는"으로하지만 API를 매우 느리게 될 것입니다 것을 걱정하는 접근 방식을 시도했다. 성능에 영향을 미치지 않는 확장 가능한 접근 방식이 필요합니다.

+0

데이터베이스에 브랜드와 연도 별 색인이 있습니까? – Vecchiasignora

+0

@Vecchiasignora no. 방금이 두 클래스를 만들었습니다. 그게 필요 할까 ? –

+0

예 테이블에 큰 데이터가있는 경우 브랜드에 대한 인덱스와 – Vecchiasignora

답변

1

봅니다 필터를 생성하고이 DbSet<ProductEntity> 또는 데이터 액세스 레이어 DB 등이

var Query = filter.FilterObjects(your dbset of entity); 같은 FilterObjects를 호출 한 후이

var filter = new Filte {Brand = ..., Year = ....} 
........ 
    public class Filter 
     { 
      public string Brand { get; set; } 
      public int? Year { get; set; } 
      public IQueryable<ProductEntity> FilterObjects(IQueryable<ProductEntity> query) 
      { 
       if (!string.IsNullOrEmpty(Brand)) 
        query = query.Where(x => x.Brand == Brand); 
       if (Year.HasValue) 
        query = query.Where(x => x.Year = Year); 

      } 

     } 

같은 필터 parametre 함께 initilize합니다. (회원) 느릅 나무가있다 ProductEntity

list/enumarable로하고 Query.ToList() 느릅 나무보다는 당신의 dbset은 DB에 실시간 마침내 요청, 그리고에 대해 잊지 말아합니다 덱스

관련 문제