C#/ LINQ - 基于复选框状态的条件LINQ查询

时间:2017-10-17 07:35:09

标签: c# linq if-statement

我正在尝试构建一个在值发生变化时执行的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;

任何人都可以帮助您做到最好的方式吗

3 个答案:

答案 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;的参考资料。运营商:

?: Operator (C# Reference)

EDITED: 根据启示录的评论,没有必要多次检查这个条件。