2017-03-28 45 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