2011-03-14 46 views
2

有了这个代码管理空与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我如何管理呢?

谢谢,

+2

这似乎是一个非常奇怪的查询。如果名字和姓氏是“约翰”和“史密斯”,那么客户名单是每个人的名字都是约翰,每个人的姓都是史密斯。你确定这个查询是你真正想要的吗? – 2011-03-14 14:51:48

+0

名字不是强制性的 – 2011-03-14 14:55:59

回答

14

像这样:

bool areEquivalent = string.Compare(s1, s2, true) == 0; 
+0

这句柄null? – BrokenGlass 2011-03-14 14:42:16

+0

@Broke:是的,它的确如此。 – SLaks 2011-03-14 14:42:31

+0

+1是使用'string.Equals'唯一的答案(就像现在)。 – 2011-03-14 14:43:49

4

使用String.Equals()指定不区分大小写。

0
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>(); 
1

我通常不区分大小写字符串打交道时,就像使用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视为与用于比较目的的空字符串等效。

0

事情是这样的:

where String.Equals(p.LastName, lastName, StringComparison.OrdinalIgnoreCase) 
0

您可以使用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>();