C# Linq 返回 Null 或空值属性

C# Linq returning Null or Empty valued properties

我已经查找了此处找到的 (2) 个问题,但无法转化为我的工作,这可能是最简单的问题之一。我有一个 class 的属性,这些属性正在被早期阶段读取的数据填充。我有下面的表达式来列出所有 NON-NULL、Non-empty、Non-Whitespace 值,但无论我做什么它都不起作用——意思是,returns 也是空属性。 (c 为整数):

            var props = MyClass.MyApi.Test[c]

            .GetType()
            .GetProperties()
            .Select(x => new { name = x.Name, value = x.GetValue(MyClass.MyApi.Test[c]) })
            .Where
            (
                x => x != null && !String.IsNullOrWhiteSpace(x.ToString())
            )
            .ToList();

然后我得到,例如

{ name = lalala, value = 1 }, { name = aURL, value = http://servertest:7707/table/some/thing }, { name = table_name, value = MY.TABLE }, { name = else, value = }, { name = more, value =  }, { name = myindex, value =  }

我只是无法删除没有价值的属性,例如上面的 属性 more,或 myindex.. 任何 advice/help 将不胜感激..

您目前正在检查 x 是否不为空,但 x 是完整的项目。
您应该检查 x.value 是否不为 null
像这样

var props = MyClass.MyApi.Test[c]
.GetType()
.GetProperties()
.Select(x => new { name = x.Name, value = x.GetValue(MyClass.MyApi.Test[c]) })
.Where
(
    x => x.value != null && !String.IsNullOrWhiteSpace(x.value.ToString())
)
.ToList();

编辑:
正如 Andrei15193 所建议的 where 可以使用

更简洁一些
.Where
(
   x => x.value is string stringValue ? !string.IsNullOrWhiteSpace(stringValue) : x.value != null
)