我正在尝试构建一个在值发生变化时执行的LINQ查询,但是我只想在与Windows表单上的某个复选框勾选的条件下运行与价格和表面区域相关的4个语句。我的代码在
之下 var userSearchQuery =
from sale in saleData
where checkedCities.Contains(sale.City)
&& checkedBedrooms.Contains(sale.Bedrooms)
&& checkedBathrooms.Contains(sale.Bathrooms)
&& checkedHouseTypes.Contains(sale.HouseType)
&& minPrice <= sale.Price
&& maxPrice >= sale.Price
&& minSurfaceArea <= sale.SurfaceArea
&& maxSurfaceArea >= sale.SurfaceArea
select sale;
任何人都可以帮助您做到最好的方式吗
答案 0 :(得分:1)
您可以做的就是按原样制作基本查询。因此,只需删除您希望根据UI中的某些条件进行动态添加的最后4个条件。您将看到您的查询类型为IQueryable。
var userSearchQuery =
from sale in saleData
where checkedCities.Contains(sale.City)
&& checkedBedrooms.Contains(sale.Bedrooms)
&& checkedBathrooms.Contains(sale.Bathrooms)
&& checkedHouseTypes.Contains(sale.HouseType);
不要选择任何东西。现在根据用户界面添加条件。
if(checkBox1.Checked)
userSearchQuery = userSearchQuery.Where(s => minPrice <= s.Price);
if(checkBox2.Checked)
userSearchQuery = userSearchQuery.Where(s => maxPrice => s.Price);
if(checkBox3.Checked)
userSearchQuery = userSearchQuery.Where(s => minSurfaceArea => s.SurfaceArea);
if(checkBox4.Checked)
userSearchQuery = userSearchQuery.Where(s => maxSurfaceArea => s.SurfaceArea);
最后通过调用ToList()来执行查询。
var results = userSearchQuery.Select(s => s).ToList();
答案 1 :(得分:0)
您可以堆叠查询,因此首先为所有情况创建一个IEnumerable,然后仅在选中复选框时才向其他IEnumerable添加其他查询。
var userSearchQuery = from sale in saleData
where checkedCities.Contains(sale.City)
&& checkedBedrooms.Contains(sale.Bedrooms)
&& checkedBathrooms.Contains(sale.Bathrooms)
&& checkedHouseTypes.Contains(sale.HouseType)
select sale;
if (checkbox.IsChecked)
{
userSearchQuery = from sale in userSearchQuery
where minPrice <= sale.Price
&& maxPrice >= sale.Price
&& minSurfaceArea <= sale.SurfaceArea
&& maxSurfaceArea >= sale.SurfaceArea
select sale;
}
答案 2 :(得分:0)
您可以使用&#39; true&#39;返回结果如下:
[Service]
User=...
Group=...
我已经测试了语法,但没有测试执行,所以如果它没有按预期工作,请告诉我。
阅读有关&#39;?&#39;的参考资料。运营商:
EDITED: 根据启示录的评论,没有必要多次检查这个条件。