0

嗨,我进入了一个应该有高级搜索过滤器的 homefinder 项目。它应该有 3 个下拉列表,用户可以从中选择租金金额、位置和性别类型,或者用户也可以不选择任何因为它具有默认值“ALL”,这会导致显示存储在数据库中的所有房屋,但如果用户从下拉列表中选择一个或两个值,另一个默认值为“ALL”,或者三个都有值,它应该导致它们的并集。我尝试使用 if 语句

If (combobox1.text == "ALL" && combobox2.text == "ALL" && combobox3.text == "ALL")
{
 // shows all the homes
}
else if ( combobox1.text != "ALL" && combobox2.text == "ALL" && combobox3.text == "ALL")
{
 // say combobox1 is rent amount, shows all the homes having that rent amount
}

else if (combobox1.text == "ALL" && combobox2.text != "ALL" && combobox3.text == "ALL")
{
   // say combobox2 is gender type shows all the homes having that        gender category
   if (combox2.text == "Female")
     // all homes w "female"
   else
     // all homes w male
}

else if ( combobox1.text == "ALL" && combobox2.text == "ALL" && combobox3.text != "ALL")
{
// say combobox3 is location, shows all homes in that location
}

else if ( combobox1.text != "ALL" && combobox2.text != "ALL" && combobox3.text != "ALL")
{
}
else if ( combobox1.text != "ALL" && combobox2.text != "ALL" &&   combobox3.text == "ALL")
{
}

等等,这是我迄今为止想到的代码:l 我怎样才能使它们相交。比如如果我在rentamount 下选择500,在location 下选择1st Street,我怎样才能找到位于1st Street 的租金为500 的房屋?

顺便说一句,我已经知道如何展示房屋了。我担心的只是如何在下拉列表中找到项目的交集。

您的任何帮助都将不胜感激。谢谢

4

1 回答 1

0

取决于您如何进行数据访问,但是使用 Linq 会更容易和更清洁。假设您使用的是 Linq2SQL 或实体框架,并且您的数据库中有一个名为 Homes 的表,那么如果您可以访问ctx名为更有意义的东西)...

var homes = ctx.Homes;
if (cmbRentAmount.Text != "All") {
  homes = homes.Where(h => h.RentAmount == cmbRentAmount.Text);
}
// Similar for the other two combos
// ...
// Now we enumerate the query, which does the actual database access
var homesList = homes.ToList();

请注意,homes第一行中的变量是一个未枚举的查询,这意味着 L2S/EF 实际上还没有查询数据库。如果用户选择了某些内容,您将浏览您的三个组合,修改查询。当您 enumeratehomes时,它​​将执行查询,并为您提供所需的结果。

于 2016-04-27T21:49:49.387 回答