当前位置: 首页 > 编程语言 > C#

C#LinqInnerJoin分享

时间:2023-04-10 13:25:17 C#

C#LinqInnerJoin想选只养宠物的人。当我执行查询varquery=frompinpeoplejoinptsinpetsonpequalspts.Ownerintogrpselectnew{grp=grp,PersonName=p.FirstName};没有宠物的人也被选中。我的列表是Person[]prn=newPerson[3];prn[0]=新人();prn[0].FirstName="乔恩";prn[0].LastName="双向飞碟";prn[1]=新人();prn[1].FirstName="马克";prn[1].LastName="Gravell";prn[2]=新人();prn[2].FirstName="Alex";prn[2].LastName="Grover";列出人=newList();foreach(Personpinprn){people.Add(p);}Pet[]pt=newPet[3];pt[0]=新宠物();pt[0].Name="佐尼";pt[0].Owner=people[0];pt[1]=新宠物();pt[1].Name="Duggie";pt[1].Owner=people[0];pt[2]=新宠物();pt[2].Name="佐吉";pt[2].Owner=people[1];列表宠物=新列表();foreach(Petpinpt){pets.Add(p);那是因为你正在使用join...intogroupjoin。您只需要一个简单的连接:varquery=(frompinpeoplejoinptsinpetsonpequalspts.Ownerselectp).Distinct();或者,如果你想要有宠物的人和他们的主人,你可以这样做:varquery=pets.GroupBy(pet=>pet.Owner).Select(x=>new{Owner=x.Key,Pets=x.ToList()});这将产生一个结果,你可以得到每个主人和他们的宠物,但仅限于有宠物的人。如果您需要其他东西,请告诉我们……顺便说一句,现在是学习对象和集合初始化器的好时机。这是初始化人员列表的简单方法,例如:},newPerson{FirstName="Alex",LastName="Grover"},};更紧凑:)编辑:交叉连接很容易:varquery=frompersoninpeoplefrompetinpetsselectnew{person,pet};使用groupjoin有效地模拟leftjoin。听起来你C#很深,我建议你仔细阅读第11章:)这是另一种方法,只需添加一行:varquery=frompinpeoplejoinptsinpetsonpequalspts.Ownerintogrpwheregrp.Any()//在这里,我像你一样选择组,但我添加了一行以仅选择包含至少一个元素的组并忽略其余部分。这也可以在一行代码中使用lambda表达式来完成...以上是C#学习教程:C#LinqInnerJoin分享的全部内容。--IEnumerablepeopleWithPets=people.Where(x=>pets.Any(y=>y.Owner==x));本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: