如何根据以前的过滤进行过滤

时间:2017-03-21 07:36:54

标签: c# linq datatable

可以通过Id,Buyer或Price过滤表格。算法应该是这样的:

1.Filter Id,然后根据之前的过滤结果筛选买方,Price也是如此。 2.过滤买方,然后根据先前的过滤结果过滤价格,Id也是如此。 3.过滤价格,然后根据先前的过滤结果过滤ID,买方也是如此。

{{1}}

我如何根据其他结果进行过滤,并且无论哪个条件(Id,买方或价格)首先出现都无关紧要?

3 个答案:

答案 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