我遇到linq查询问题,其中连接记录为空。
我有3个型号:
位置,公司和个人。
我使用以下LINQ查询来检索特定公司所有人的所有位置的不同列表:
locations =
db.Companies.Where(c => c.Name == company.Name)
.SelectMany(c => c.People)
.Select(p => p.Location)
.Distinct()
.ToList();
问题出现在从此查询中检索到的Peron没有位置(位置对于Person是可选的)。
在这种情况下,由于未将Object引用设置为对象,以下查询(获取每个位置的名称)将失败:
locations.Select(g => g.Name).ToList()
如何更改上述行以忽略已检索的人员记录中没有位置的记录?
答案 0 :(得分:3)
试试这个:
locations =
db.Companies.Where(c => c.Name == company.Name)
.SelectMany(c => c.People)
.Where(p => p.Location !=null)
.Select(p => p.Location)
.Distinct()
.ToList();
干杯
答案 1 :(得分:2)
通常,您可以使用null合并或条件运算符来检查null,然后使用合适的默认值替换它,例如:
locations =
db.Companies.Where(c => c.Name == company.Name)
.SelectMany(c => c.People)
.Select(p => p.Location ?? SomeDefaultLocation)
.Distinct()
.ToList();
e.g。 SomeDefaultLocation
可以是readonly static
的{{1}}个实例。
但是,在您提供的上下文中,这并没有多大意义(例如,所有没有位置的人都会返回Location
)。这将是一个更典型的用法:
SomeDefaultLocation