簡體   English   中英

C#/ LINQ-基於復選框狀態的條件LINQ查詢

[英]C# / LINQ - conditional LINQ query based on checkbox status

我正在嘗試構建一個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;

任何人都可以提供最好的方法來幫助您

您可以做的就是照原樣進行基本查詢。 因此,只需從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();

您可以堆疊查詢,因此首先為所有情況創建一個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;
}

您可以使用“ true”返回結果的事實,如下所示:

var userSearchQuery =
        from sale in saleData
        where checkedCities.Contains(sale.City)
        && checkedBedrooms.Contains(sale.Bedrooms)
        && checkedBathrooms.Contains(sale.Bathrooms)
        && checkedHouseTypes.Contains(sale.HouseType)
        && (*some condition is checked*) ? (minPrice <= sale.Price && maxPrice >= sale.Price && minSurfaceArea <= sale.SurfaceArea && maxSurfaceArea >= sale.SurfaceArea) : true
        select sale;

我已經測試了語法,但沒有測試執行,所以請讓我知道它是否無法按預期工作。

閱讀有關“?”的參考 運營商:

?:運算符(C#參考)

編輯:根據啟示錄,無需多次檢查條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM