2010-07-07 55 views
0

我有以下方法:C#.NET 4.0:可爲空輸入字符串參數和Lambda表達式

public IQueryable<Profile> FindAllProfiles(string CountryFrom, string CountryLoc) 
{ 


    return db.Profiles.Where(p => p.CountryFrom.CountryName.Equals(CountryFrom,StringComparison.OrdinalIgnoreCase)); 

}

現在,它只是CountryFrom過濾器,但我需要CountryLoc對其進行過濾以及。 那麼如何修改Where過濾器?

另外,CountryFrom可以爲null或CountryLoc可以爲null。那麼如何修改方法的簽名到所有可爲空的輸入字符串參數。

我知道如何做到這一點在SQL中,但我不確定有關lambda表達式或LINQ。

謝謝

回答

2

你的問題實際上並不是LINQ特有的。你可以把拉姆達內的任何布爾條件,你想要的,如:

p => p.CountryFrom.CountryName.Equals(...) && p.CountryLoc.CountryName.Equals(...) 

處理空值,您可以使用靜態string.Equals方法來代替,就像這樣:

p => string.Equals(p.CountryFrom.CountryName, CountryName, StringComparison.OrdinalIgnoreCase) 

如果這開始變得太長時間了,你總是可以將它提取成一種方法。

0
return db.Profiles 
    .Where(p => p.CountryFrom.CountryName.Equals(CountryFrom, 
     StringComparison.Ordinal.IgnoreCase) && 
     p.CountryLoc.CountryName.Equals(CountryLoc, 
     StringComparison.Ordinal.IgnoreCase)); 

對不起......有沒有辦法讓這個聲明漂亮。

只要記住你可以在Where擴展方法中使用你想要的任何布爾邏輯。它就像其他地方一樣簡單。

此外,無論什麼(它是一個引用類型),字符串參數都可以爲null,因此您無需擔心可以爲空。

+0

檢查空值我認爲提問者關心Equals方法拋出NullReferenceException。 – EMP 2010-07-07 03:56:16

0

您會希望在您的lambda表達式中使用邏輯和運算符「& &」以同時由CountryFrom和CountryLoc進行過濾。例如:

db.Profiles.Where(p => p.CountryFrom == CountryFrom && p.CountryLoc == CountryLoc); 

在C#中字符串是引用類型,因此可以爲空。你可以使用

myString == null