如何将其添加到一个查询中?我想要的是公司中与我正在搜索的人的姓名相匹配的人.
目前我得到公司,然后运行基本相同的搜索.
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);
}
Run Code Online (Sandbox Code Playgroud)
假设我明白你要做什么,你可以这样做:
var person = bidInfo.Companies
.Where(c=>c.CompanyDomain != null)
.SelectMany(c=>c.CompanyDomain.People)
.SingleOrDefault(p=>p.Name == bidInfo.ArchitectPerson.Name);
Run Code Online (Sandbox Code Playgroud)
请注意,您已经没有过滤公司了(您只是让第一家拥有该名称的公司,如果有倍数怎么办?如果不可能,那么公司检查是没用的,您也可以这样做我做了,然后选择所有人然后过滤,而不是进入每个公司内部,检查这个人是否在那里,然后以某种方式上升和下降!)
为了找到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)
Run Code Online (Sandbox Code Playgroud)
FirstOrDefault对比SingleOrDefault:名称不太可能是唯一的:一家公司可能有一个以上的"约翰史密斯"为他们工作; 一个bidInfo可能包含几个Companies,其中不止一个人雇用不同的"简史密斯".
SingleOrDefault()如果有多个符合p.Name == bidInfo.ArchitectPerson.Name条件的元素,则会抛出异常.
只要上面概述的"史密斯案例"描述了您的程序可接受的状态,请使用FirstOrDefault().
| 归档时间: |
|
| 查看次数: |
329 次 |
| 最近记录: |