如何从C#中的属性x不为null的列表中仅获取对象

时间:2016-11-29 20:36:44

标签: c# linq

我有一个项目列表

List<Project> projects = ProjectRepository.GetProjects(user);

这会返回用户项目。每个项目都可以有一个名为ProjectServerUrl的属性。我想只从List获取那些对象属性ProjectServerUrl不为null的项目。我尝试了以下代码行,但它总是返回所有项目:

List<Project> listP = projects.Where(x => (x.ProjectServerUrl != null || x.ProjectServerUrl != "")).ToList();

这里有什么问题?

3 个答案:

答案 0 :(得分:2)

您要求获取ProjectServerUrl为null或为空的所有项目。你必须使用AND

List<Project> listP = projects.Where(x => (x.ProjectServerUrl != null && x.ProjectServerUrl != "")).ToList();

答案 1 :(得分:2)

var listP = projects
    .Where(x => (x.ProjectServerUrl != null && x.ProjectServerUrl != ""))
    .ToList();

我认为您的||必须是&&

你可以简化这个:

var listP = projects
    .Where(x => !String.IsNullOrEmpty(x))
    .ToList();

答案 2 :(得分:2)

<强>解释

在你的Where子句中,你正在使用OR运算符,这就是你仍然在列表中接收对象的原因,即使它们为空或空白......

例如,ProjectServerUrl不等于null,但这并不意味着为空或只是空格。基本上,OR运算符需要更改为&amp;&amp;

所以改变这个:

List<Project> listP = projects.Where(x => (x.ProjectServerUrl != null || x.ProjectServerUrl != "")).ToList();

要:

List<Project> listP = projects.Where(x => !String.IsNullOrWhiteSpace(x.ProjectServerUrl)).ToList();

这样就可以防止null,空或空格值。

我希望这有帮助!