Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ管理null_C#_Linq - Fatal编程技术网

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。你确定这个查询是你真正想要的吗?名字不是必须的