C# 使用LINQ管理null
使用此代码C# 使用LINQ管理null,c#,linq,C#,Linq,使用此代码 var res = (from p in list where p.FirstName.ToUpper() == firstName.ToUpper() || p.LastName.ToUpper() == lastName.ToUpper() select p).ToList<Client>(); var res=(来自列表中的p,其中 p、 FirstName.ToUpper()==FirstName.ToUpper
var res = (from p in list where
p.FirstName.ToUpper() == firstName.ToUpper() ||
p.LastName.ToUpper() == lastName.ToUpper() select p).ToList<Client>();
var res=(来自列表中的p,其中
p、 FirstName.ToUpper()==FirstName.ToUpper()||
p、 LastName.ToUpper()==LastName.ToUpper()选择p.ToList();
p.FirstName或FirstName可以为NULL我如何管理它
谢谢,使用String.Equals()指定大小写不敏感。var res=(来自列表中的p,其中
var res = (from p in list where
p.FirstName != null && firstName != null && p.FirstName.ToUpper() == firstName.ToUpper() ||
p.LastName.ToUpper() == lastName.ToUpper() select p).ToList<Client>();
p、 FirstName!=null&&FirstName!=null&&p.FirstName.ToUpper()==FirstName.ToUpper()|
p、 LastName.ToUpper()==LastName.ToUpper()选择p.ToList();
像这样:
where String.Equals(p.LastName, lastName, StringComparison.OrdinalIgnoreCase)
我通常使用
字符串。在处理不区分大小写的字符串时比较,例如:
bool areEquivalent = string.Compare(s1, s2, true) == 0;
像这样的
var res = (from p in list where
(p.FirstName ?? "").ToUpper() == (firstName ?? "").ToUpper() ||
(p.LastName ?? "").ToUpper() == (lastName ?? "").ToUpper() select p)
.ToList<Client>();
var res=(来自列表中的p,其中
(p.FirstName??).ToUpper()==(FirstName??).ToUpper()||
(p.LastName???).ToUpper()==(LastName???).ToUpper()选择p)
.ToList();
这实际上取决于当其中一个为null
时要执行的操作。为了便于比较,这应该将null
视为等同于空字符串。您可以使用string.Compare
string x = null;
string y = null;
//both NUnit tests pass
Assert.IsTrue(string.Equals(x, y));
Assert.AreEqual(0, string.Compare(x, y, true));
...
var ignoreCase = true;
var res = (from p in list
where string.Compare(p.FirstName, firstName, ignoreCase) == 0 ||
string.Compare(p.LastName, lastName, ignoreCase) == 0
select p).ToList<Client>();
字符串x=null;
字符串y=null;
//两项NUnit测试都通过了
Assert.IsTrue(string.Equals(x,y));
aresequal(0,string.Compare(x,y,true));
...
var ignoreCase=真;
var res=(来自列表中的p
其中string.Compare(p.FirstName,FirstName,ignoreCase)==0 | |
string.Compare(p.LastName、LastName、ignoreCase)=0
选择p.ToList();
+1是唯一一个使用string.Equals
的答案(截至目前)。尽管StringComparison.ordinallingorecase
与OP的请求匹配,但我怀疑StringComparison.CurrentCultureInoRecase
更适合此应用程序。但是任何东西都比ToUpper
好。这似乎是一个非常奇怪的查询。如果firstname和lastname分别是“John”和“Smith”,那么客户列表中的每个人的名字都是John,每个人的姓氏都是Smith。你确定这个查询是你真正想要的吗?名字不是必须的