Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# 允许将空值添加到列表中_C#_.net_Linq_Anonymous Types - Fatal编程技术网

C# 允许将空值添加到列表中

C# 允许将空值添加到列表中,c#,.net,linq,anonymous-types,C#,.net,Linq,Anonymous Types,我删除了所有不必要的变量,并试图直接关注手头的问题。我有一个可以返回空值的变量: var ppl = from p in xyz.new_ppl select new { p.name }; 我查询它并将其添加到列表中: foreach (var peeps in ppl) { peopleList.Add(peeps.name); peopleNames = peopleList; }

我删除了所有不必要的变量,并试图直接关注手头的问题。我有一个可以返回空值的变量:

var ppl = from p in xyz.new_ppl
          select new
          {
              p.name
          };
我查询它并将其添加到列表中:

foreach (var peeps in ppl)
{
    peopleList.Add(peeps.name);
    peopleNames = peopleList;
}
当我在select语句之前添加一个where子句进行检查,以使用该语句检查空值时,这一点就起作用了

where p.name != null
我希望能够做的是允许添加空值。所以我尝试了firstordefault,但没有成功

name = p.name.FirstorDefault()

错误表明我无法将字符转换为字符串。peopleNames是string类型的setter、getter方法。有什么变通方法或解决方案吗?

您想这样试试吗

from p in xyz.new_ppl
select p.name;
var ppl = from p in xyz.new_ppl
          select new
          {
              p == null ? null : p.name
          };
当您执行p.name.FirstorDefault时,这意味着您尝试获取字符串p.name的第一个字符。所以编译器错误是正确的,我不知道为什么它不能隐式地将字符转换为字符串-但这是另一个故事:


但是,如果您也希望添加空值,为什么不删除where p.name!=空?

为什么这个peopleNames=peopleList;在循环内部?运行原始代码时会出现什么错误?忽略p.name.FirstOrDefault内容以及使用时出现的错误;反正这不是你想要的。@HackedByChinese我现在远离那台机器,但我得到了一个空指针异常。当我检查数据时,我注意到peeps.name有一个空值,我仍然希望传递到列表中。错误原因很明显。请添加更多详细信息以澄清。@aba:在stackoverflow论坛中,试着解释你的答案。这可能对新用户有帮助。@aba谢谢你的回答,但正如我提到的,我把问题简化了。我需要检索多个值,比如p.name,p.age,等等…我想我试过了,但最终还是重申了我必须创建匿名变量来检索多个属性,但稍后我会检查是否有错误sure@abatishchev当我可以访问另一台计算机时,我一定会尝试一下。@John:事实上,这是mono的答案,右边的头像:我刚刚把它编辑成头像left@mono68:我的糟糕..我会查出来让你知道的。Thanks@mono68:刚刚尝试,没有工作我得到一个无效的匿名类型成员声明程序错误。任何其他建议在回过头来看我刚才问的这个问题之后,结论是这是linq to sql和linq to entities的正确答案。但是,它在我使用linq到crm的应用程序中不起作用。可能是因为entities.nulls中的嵌套关系,如果我删除where p.name,就不会添加nulls=无效的我得到一个空指针异常。我似乎无法理解这一点,所以我通过设置一个空字符串变量来代替所有空的roww值来处理空值。peopleList是什么类型的?可以粘贴堆栈跟踪和异常消息吗?人员列表的类型为字符串。我目前没有访问代码的权限。我得出的结论是,在select new{x=p.name,y=p.age…etc}中,如果其中一个属性说p.age为null,那么它会抛出null异常。我试着用各种可能的方法处理它,比如y==null?空:p.age或y=p.age??空,等等等等都没有用。唯一有效的方法是将p.age!=null,这样即使p.name包含数据,它也会跳过整行并转到下一行。我会尽快粘贴堆栈跟踪