我有以下方法:
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。
由于
答案 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