Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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# Select语句以防止选择null_C#_.net_Linq - Fatal编程技术网

C# Select语句以防止选择null

C# Select语句以防止选择null,c#,.net,linq,C#,.net,Linq,我有一个模型,其中Person有0个、1个或2个Contact对象。 联系人信息主页(联系人类型为“h”)和工作联系人信息(联系人类型为“w”) 选择街道名称时,是否有方法检查联系人类型为“h”的对象是否存在?现在,如果联系人对象不存在,我将得到一个null异常 from m in persons select new { Id = m.id, Name = m.surname, Address = m.Contacts.Where(c => c.contact_t

我有一个模型,其中
Person
有0个、1个或2个
Contact
对象。
联系人信息主页(联系人类型为“h”)和工作联系人信息(联系人类型为“w”)

选择街道名称时,是否有方法检查联系人类型为“h”的对象是否存在?现在,如果联系人对象不存在,我将得到一个null异常

from m in persons
select new
{
    Id = m.id,
    Name = m.surname,
    Address = m.Contacts.Where(c => c.contact_type == "H").SingleOrDefault().streetname
};

您可以有多个
Where
子句:

Address = m.Where( person => person.Contacts != null ).Contacts.Where( ...
那么:

var rows = from m in persons
    let h = m.Contacts.Where(c => c.contact_type == "H").SingleOrDefault()
    select new {
        Id = m.id,
        Name = m.surname,
        Address = (h == null ? null : h.streetname)
    };
或:

也可以这样写(也许更清楚):


仅检查
联系人
是否为空;它不检查
H
-联系人exists@MarcGravell他组合了多个where子句。第一个过滤空触点,第二个on将过滤on触点type@Wouter是的,但问题是(正如我读到的)当没有H触点时它会失败。以上操作仍然会失败,除非对
.streetname
@MarcGravell True的最终获取做些什么,我假设
联系人
是非空
联系人
的集合objects@Nick我也是;问题是:它是包含一个H触点,还是不包含一个H触点?我喜欢第二个,对我来说似乎很直接。非常感谢()
var rows = from m in persons
    select new {
        Id = m.id,
        Name = m.surname,
        Address = m.Contacts.Where(c => c.contact_type == "H")
                 .Select(c => c.streetname).SingleOrDefault()
    };
var rows = from m in persons
    select new {
        Id = m.id,
        Name = m.surname,
        Address = (from c in m.Contacts
                   where c.contact_type == "H"
                   select c.streetname).SingleOrDefault()
    };