條款我使用MVC一個簡單的搜索頁面下面的拉姆達:最佳方式應對在LAMBDA
名稱和PostedName都是字符串。
Results.where(a => a.Name.Contains(PostedName))。ToList();
感謝偉大的時候,張貼名稱有一個值(優秀的過濾器),但當它是空的,我得到bupkas(空列表)。
我會理想地喜歡我的其中子句被忽略時空字符串。
這怎麼辦?
沒有ifs,elses和whatifs的理想速記。
謝謝!
條款我使用MVC一個簡單的搜索頁面下面的拉姆達:最佳方式應對在LAMBDA
名稱和PostedName都是字符串。
Results.where(a => a.Name.Contains(PostedName))。ToList();
感謝偉大的時候,張貼名稱有一個值(優秀的過濾器),但當它是空的,我得到bupkas(空列表)。
我會理想地喜歡我的其中子句被忽略時空字符串。
這怎麼辦?
沒有ifs,elses和whatifs的理想速記。
謝謝!
您可以動態添加WHERE
子句。請記住,你只是用這些子句構建一個表達式樹,它實際上並不是執行,直到在這種情況下,你調用.ToList()
。所以,你可以做這樣的事情:
var filteredResults = Results;
if (!string.IsNullOrWhitespace(PostedName))
filteredResults = filteredResults.Where(a => a.Contains(PostedName));
filteredResults = filteredResults.ToList();
根據您可能需要爲了使這種編譯顯式聲明類型filteredResults
的類型。
如果你想在網上的東西多一點,這可能做的伎倆:
我認爲這是對的意圖不太清楚,但。第一個例子的好處還在於,您可以在相同的結構之後添加更多的過濾器,基本上根據需要爲其他過濾器字段動態添加更多的WHERE
子句。
我建議:
Results.Where(a => a.Name.Contains((PostedName ?? "").Trim())).ToList();
"ThisIsAString".Contains("")
返回true。
在案件的姓氏爲空的情況下,它將被改爲「」。
如果在PostsName中有前導和/或尾隨空白字符,則它們將被刪除。
哇,大衛怎麼一個徹底的嘴巴!謝謝! – Pinch
我真的很喜歡內聯技巧! – Pinch
LINQ to Entities不識別方法'布爾IsNullOrWhiteSpace(System.String)'方法,並且此方法不能轉換爲存儲表達式。 @David – Pinch