如何将其添加到一个查询中?我想要的是公司中与我正在搜索的人的姓名相匹配的人。
目前我获得了公司,然后运行基本相同的搜索。
var existingCompany = bidInfo.Companies
.FirstOrDefault( c=> c.CompanyDomain != null &&
c.CompanyDomain.People.FirstOrDefault(
p => p.Name == bidInfo.ArchitectPerson.Name )
!= null);
Person existingPerson=null;
if (existingCompany !=null)
{
existingPerson = existingCompany.CompanyDomain.People.FirstOrDefault(p => p.Name == bidInfo.ArchitectPerson.Name);
}
答案 0 :(得分:7)
假设我理解你要做的事情,你可以这样做:
var person = bidInfo.Companies
.Where(c=>c.CompanyDomain != null)
.SelectMany(c=>c.CompanyDomain.People)
.SingleOrDefault(p=>p.Name == bidInfo.ArchitectPerson.Name);
请注意,您已经没有过滤公司了(您只是让第一家拥有该名称的公司,如果有倍数会怎么样?如果那不可能,那么公司检查是没用的,你可以像我一样做,只选择所有人然后过滤,而不是进入每个公司内部,检查这个人是否在那里,然后以某种方式上升和下降!)
答案 1 :(得分:5)
要从Person
中找到与您正在搜索的Company
的名称相匹配的bidInfo.ArchitectPerson
,您需要查看所有人与bidInfo
关联的公司,然后找到匹配名称的人。
这可以通过以下方式完成:
var existingPerson = bidInfo.Companies
.Where(c => c.CompanyDomain != null && c.CompanyDomain.People != null)
.SelectMany(c => c.CompanyDomain.People)
.FirstOrDefault(p => p.Name == bidInfo.ArchitectPerson.Name)
FirstOrDefault
与SingleOrDefault
:名称不太可能是独一无二的:一家公司可能拥有多个名称" John Smith"为他们工作;一个bidInfo
可以包含多个Companies
,其中不止一个人使用不同的" Jane Smith"。
p.Name == bidInfo.ArchitectPerson.Name
条件, SingleOrDefault()
将抛出异常。
只要"史密斯案例"上面概述的描述了您的计划的可接受状态,请使用FirstOrDefault()
。
答案 2 :(得分:2)
如果我理解正确,您正在尝试找到第一家与该建筑师同名的公司,然后返回这两家公司。
如果是这样,那么我认为这将有效:
var query =
from c in bidInfo.Companies
from p in c.CompanyDomain.People
where p.Name == bidInfo.ArchitectPerson.Name
select new { c, p };
var first = query.FirstOrDefault();
Company existingCompany = first?.c;
Person existingPerson = first?.p;
如果我错过了什么,请告诉我。