我正在尝试在我的ApiController中实现搜索功能。我想要做的是:为客户创建api,将单个字符串作为输入,如“Nike 2016”。我的api只能从“Nike”品牌和“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 :(得分:1)
尝试使用您的过滤器参数创建过滤器并使用此
进行初始化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
ProductEntity
而不是Query.ToList()
将是对您的数据库的真正最终请求,并且不要忘记indexis
答案 1 :(得分:0)
我意识到这是一个老问题,但我认为这可能对某些人有帮助...
另一种选择是使用OData在整个模型中所有基于实体的端点上对过滤和分页进行排序。