将group by的结果连接到string中

时间:2017-03-15 13:31:27

标签: c# linq

我有2张桌子

Patients{
    Id
}

PatientsDoctorAssociation{
    PatientId,
    DoctorId
}

使用LINQ-to-Entities我想通过这两个表的连接建立一个组,我想将DoctorId连接成一个单独的字符串,如下所示:

list = (from a in db.Patients
        join b in db.PatientsDoctorAssociation on a.Id equals b.PatientId
        group new {A=a,B=b} by b.PatientId into g
        select new {
            PatientId = g.Key,
            DoctorIds = ??
        });

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

使用string.Join()

问题是,这是无法转换为SQL的。因此,在检索查询结果后,您需要在内存中执行此操作。您可以使用.AsEnumerable()方法。

var list = (from a in db.Patients
            join b in db.PatientsDoctorAssociation on a.Id equals b.PatientId
            group new { A = a, B = b } by b.PatientId
            into g
            select new
            {
                PatientId = g.Key,
                DoctorIds = g.Select(z => z.B.DoctorId)
            }
    )
    .AsEnumerable()
    .Select(x => new
    {
        PatientId = x.PatientId,
        DoctorIds = string.Join(",", x.DoctorIds)
    })
    .ToArray();

答案 1 :(得分:0)

string.Join可以解决问题。

DoctorIds = string.Join(",", g.Select(p=>p.B.DoctorId))

答案 2 :(得分:0)

我认为这是你正在寻找的东西:

var list = (from a in db.Patients
join b in db.PatientsDoctorAssociation on a.Id equals b.PatientId
select b).toList();

根据您的加入,您可以获得PatientId以及DoctorID。

如果您的意思是字符串操作,我们可以看到您的医生姓名的格式吗?