2017-03-28 42 views
0

我想在我的ApiController中實現搜索功能。我想要做的是:爲客戶端創建api,將採用單個字符串作爲輸入,如「Nike 2016」。而我的api只能從「耐克」品牌「2016」年返回記錄。使用實體框架實現智能搜索

下面是我的模型類。 我正在使用實體框架。

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

嘗試創建過濾器,並與您的過濾器parametre這樣

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

      } 

     } 

用來初始化之後調用它像這樣

var Query = filter.FilterObjects(your dbset of entity);這樣DbSet<ProductEntity>或數據訪問層分貝FilterObjects。(會員)至極具有您dbsetProductEntity

list/enumarableQuery.ToList()至極將是真正的finaly請求你的分貝,並且不要忘記在dexis