c#.net 4.0:可以为空的输入字符串参数和lambda表达式

时间:2010-07-07 03:26:55

标签: c# input parameters nullable

我有以下方法:

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。

由于

3 个答案:

答案 0 :(得分:2)

您的问题实际上不是LINQ特有的。您可以将任何布尔条件放在所需的lambda中,例如:

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

要处理空值,您可以使用静态string.Equals方法,如下所示:

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

如果这开始变得太长,你总是可以将它提取到一个方法中。

答案 1 :(得分:0)

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

抱歉......没有办法说出那句话。

请记住,您可以在Where扩展方法中使用任何您想要的布尔逻辑。它就像在其他任何地方一样容易。

此外,无论什么(它是引用类型),字符串参数都可以为null,因此您不必担心使事物可以为空。

答案 2 :(得分:0)

您需要使用逻辑和运算符“&amp;&amp;”在您的lambda表达式中,由CountryFrom和CountryLoc进行过滤。实施例

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

在C#中,字符串是引用类型,因此可以为null。您可以使用

检查空值
myString == null