有了这个代码管理空与LINQ
var res = (from p in list where
p.FirstName.ToUpper() == firstName.ToUpper() ||
p.LastName.ToUpper() == lastName.ToUpper() select p).ToList<Client>();
的p.FirstName,或中的firstName可以为NULL我如何管理呢?
谢谢,
有了这个代码管理空与LINQ
var res = (from p in list where
p.FirstName.ToUpper() == firstName.ToUpper() ||
p.LastName.ToUpper() == lastName.ToUpper() select p).ToList<Client>();
的p.FirstName,或中的firstName可以为NULL我如何管理呢?
谢谢,
像这样:
bool areEquivalent = string.Compare(s1, s2, true) == 0;
这句柄null? – BrokenGlass 2011-03-14 14:42:16
@Broke:是的,它的确如此。 – SLaks 2011-03-14 14:42:31
+1是使用'string.Equals'唯一的答案(就像现在)。 – 2011-03-14 14:43:49
使用String.Equals()指定不区分大小写。
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>();
我通常不区分大小写字符串打交道时,就像使用string.Compare
?
var res = (from p in list where
(p.FirstName ?? "").ToUpper() == (firstName ?? "").ToUpper() ||
(p.LastName ?? "").ToUpper() == (lastName ?? "").ToUpper() select p)
.ToList<Client>();
这真的取决于你想要做什么,当要么是null
。这应该将null
视为与用于比较目的的空字符串等效。
事情是这样的:
where String.Equals(p.LastName, lastName, StringComparison.OrdinalIgnoreCase)
您可以使用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>();
这似乎是一个非常奇怪的查询。如果名字和姓氏是“约翰”和“史密斯”,那么客户名单是每个人的名字都是约翰,每个人的姓都是史密斯。你确定这个查询是你真正想要的吗? – 2011-03-14 14:51:48
名字不是强制性的 – 2011-03-14 14:55:59