如何将这两个linq查询合并到一个查询中?

T M*_*own 8 c# linq

如何将其添加到一个查询中?我想要的是公司中与我正在搜索的人的姓名相匹配的人.

目前我得到公司,然后运行基本相同的搜索.

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)

Ron*_*dau 7

假设我明白你要做什么,你可以这样做:

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)

请注意,您已经没有过滤公司了(您只是让第一家拥有该名称的公司,如果有倍数怎么办?如果不可能,那么公司检查是没用的,您也可以这样做我做了,然后选择所有人然后过滤,而不是进入每个公司内部,检查这个人是否在那里,然后以某种方式上升和下降!)


AGB*_*AGB 5

为了找到PersonCompany该名称相匹配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().