可以通过Id,Buyer或Price过滤表格。算法应该是这样的:
1.Filter Id,然后根据之前的过滤结果筛选买方,Price也是如此。 2.过滤买方,然后根据先前的过滤结果过滤价格,Id也是如此。 3.过滤价格,然后根据先前的过滤结果过滤ID,买方也是如此。
{{1}}
我如何根据其他结果进行过滤,并且无论哪个条件(Id,买方或价格)首先出现都无关紧要?
答案 0 :(得分:3)
在完成过滤器之前,请不要ToList()
。然后,一旦正确设置了所有过滤器,只需调用ToList()
一次即可使查询到达数据库。
IQueriable<Items> items;
if(!string.IsNullOrEmpty(_txtboxId_)
{
items = dbContext.Items.Where(m => m.Id.Contains(_txtboxId_);
}
else
items = dbContext.Items.ToList();
if(!string.IsNullOrEmpty(_txtboxBuyer_)
{
items = dbContext.Items.Where(m => m.Id.Contains(_txtboxBuyer_);
}
else
items = dbContext.Items.ToList();
if(!string.IsNullOrEmpty(_txtboxPrice_)
{
items = dbContext.Items.Where(m => m.Id.Contains(_txtboxPrice_);
}
items = dbContext.Items.ToList();
答案 1 :(得分:3)
您应该使用IQueryable并构建整个查询,然后通过执行ToList()将其发送到数据库。 此外,你继续在每个过滤器上使用dbContext,如果你想保留以前的过滤器,使用相同的items变量,这样你甚至不需要第二个和第三个分支
IQueryable<Item> items;
if(!string.IsNullOrEmpty(_txtboxId_)
{
items = dbContext.Items.Where(m => m.Id.Contains(_txtboxId_);
}
else
{
items = dbContext.Items;
}
if(!string.IsNullOrEmpty(_txtboxBuyer_)
{
items = items.Where(m => m.Id.Contains(_txtboxBuyer_);
}
if(!string.IsNullOrEmpty(_txtboxPrice_)
{
items = items.Where(m => m.Id.Contains(_txtboxPrice_);
}
return items.ToList()
答案 2 :(得分:1)
首先,我建议您在创建要显示或使用的数据集合之前不要调用ToList()方法。
我不完全确定这会按照您的预期对您的收藏进行排序,但会尝试查看OrderBy Linq扩展方法:https://msdn.microsoft.com/en-us/library/bb534966(v=vs.110).aspx