2011-03-14 33 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>();