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()
};