我正试图在我的ApiController中实现搜索功能。我想要做的是:为客户端创建api,它将以单个字符串作为输入,比如"Nike 2016"。我的api应该只返回“耐克”品牌和"2016“年度的记录。
下面是我的模型课。I使用实体框架.
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会非常慢。我想要一种不影响性能的可伸缩方法。
发布于 2017-03-28 07:19:20
尝试创建过滤器并使用如下的过滤器参数初始化它
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);
}
}在它像这样调用FilterObjects之后
像var Query = filter.FilterObjects(your dbset of entity);这样的DbSet<ProductEntity>或数据访问层db.(成员)将您的dbset作为list/enumarable of ProductEntity
和Query.ToList()相比,wich将是对数据库的最终请求,并且不要忘记索引。
发布于 2019-06-27 16:07:43
我知道这是个老掉牙的问题,但我想这也许能帮上一些忙.
另一种选择可能是使用OData,对整个模型中所有基于实体的端点进行排序、过滤和分页。
http://odata.github.io/WebApi/
https://stackoverflow.com/questions/43061197
复制相似问题