C# 使用LINQ to SQL选择人员及其所有专业

C# 使用LINQ to SQL选择人员及其所有专业,c#,linq,C#,Linq,我有一个指向Persons表的主键列表 List<string> personKeys; 我想传入personKeys列表并查询数据库,得到每个人及其专业的列表或词典。 我写这个问题有困难 var personAndSpecialties = (from ps in this.context.PersonSpecialties where personKeys.Contains(ps.Person_K) select WHAT? ) 你试过使用吗 我现在没有要测试的SQ

我有一个指向
Persons
表的主键列表

List<string> personKeys;
我想传入personKeys列表并查询数据库,得到每个人及其专业的列表或词典。 我写这个问题有困难

var personAndSpecialties = (from ps in this.context.PersonSpecialties 
    where personKeys.Contains(ps.Person_K) select WHAT? )
你试过使用吗

我现在没有要测试的SQL,但这可能会起作用。

您尝试使用了吗


我现在没有SQL要测试,但这可能会起作用。

我想您需要的是:

var personAndSpecialties = (
    from p in this.Context.Person
        join ps in PersonSpecialties on p.Person_K equals ps.Person_K into joined
    from ps in joined.DefaultIfEmpty()
    where personKeys.Contains(p.Person_K) select p, psd );

我想你想要的是:

var personAndSpecialties = (
    from p in this.Context.Person
        join ps in PersonSpecialties on p.Person_K equals ps.Person_K into joined
    from ps in joined.DefaultIfEmpty()
    where personKeys.Contains(p.Person_K) select p, psd );

您可以创建另一个名为PersonSpecialtyViewModel的类

public class PersonSpecialtyViewModel
{
    public Person        Person         {get; set;}
    public SpecialtyName SpecialtyName  {get; set;}
}
你可能是这样的

var personAndSpecialties = (from ps in this.context.PersonSpecialties 
where personKeys.Contains(ps.Person_K) select new  PersonSpecialtyViewModel() { Person = ps.Person, SpecialtyName = ps.SpecialtyName }).ToList();

您可以创建另一个名为PersonSpecialtyViewModel的类

public class PersonSpecialtyViewModel
{
    public Person        Person         {get; set;}
    public SpecialtyName SpecialtyName  {get; set;}
}
你可能是这样的

var personAndSpecialties = (from ps in this.context.PersonSpecialties 
where personKeys.Contains(ps.Person_K) select new  PersonSpecialtyViewModel() { Person = ps.Person, SpecialtyName = ps.SpecialtyName }).ToList();

所以你想:
字典
对吧?@CodingGorilla是的,类似的,所以我可以在后面循环,然后说ok这个人,这些特长,等等..
选择什么选择具有适当属性的匿名类型。然后,如果你有一个CLR类型,你可以将它映射到你的CLR类型。@HamletHakobyan但是当一个人有多个专长时会发生什么呢?我在这一部分感到困惑。然后你的匿名类型中可以有两个属性-Person类型的Person和LIst类型的PersonSpecialities。那么你想要:
字典
对吗?@CodingGorilla是的,类似的,所以稍后我可以循环通过它们说ok这个人,这些专业,等等。
选择什么选择具有适当属性的匿名类型。然后,如果你有一个CLR类型,你可以将它映射到你的CLR类型。@HamletHakobyan但是当一个人有多个专长时会发生什么呢?我在这一部分感到困惑。那么你的匿名类型中可以有两个属性-Person类型的Person和LIst类型的PersonSpecialities。好吧,如果这个人有三个专长,我的类列表中将有三个东西?比如(P1,放射学),(P1,牙科),(P1,皮肤护理)公共特殊名称{get;set;}?这里的数据类型是什么?哦,对不起,我更正了我的答案。是的,就像你说的,一个人有3个专业,你会得到一个包含3个元素的集合,所以如果这个人有3个专业,我会在我的课程列表中有3样东西?比如(P1,放射学),(P1,牙科),(P1,皮肤护理)公共特殊名称{get;set;}?这里的数据类型是什么?哦,对不起,我更正了我的答案。是的,就像你所说的,对于一个有3个专长的人,你会得到一个包含3个元素的集合