如何强制转换一个对象,该对象内部有一个包含多个实体的linq查询

本文关键字:包含多 实体 查询 linq 有一个 内部 转换 何强制 一个对象 对象 | 更新日期: 2023-09-27 18:13:46

我有以下场景。一个带有连接语句的linq查询:

public Object getMGM(int MEB_Id)
{
    var unitOfWork = new DAL.Implementations.Entity_Framework.UnitOfWork<dbgmEntities>();
    var queryRoles =  from a in unitOfWork._ctx.MembrosMGM
                          join b in unitOfWork._ctx.Membros on a.MGM_Pai equals b.MEB_Id
                          where a.MGM_Filho == MEB_Id
                          select new { b.MEB_Nome, b.MEB_Id, a.MGM_Familiar };
    return queryRoles;
}

queryRoles在线程内运行。我只需要将它作为一个对象返回。但是我找不到一种方法来转换它并获得选择的{ b.MEB_Nome, b.MEB_Id, a.MGM_Familiar }。我尝试了下面的代码与一个实体集的返回,它工作得很好,但如果我有超过1个实体在同一个linq查询我不知道如何将它转换回来:

//this one works fine if i have just one entity set (DAL.MembroResponsavel)
var queryMembroResponsaveis = ((IEnumerable)smartThreadPool.QueueWorkItem(x => editMeb.getMembroResponsavel(currentId)).Result).Cast<DAL.MembroResponsavel>().ToList();

谢谢。

如何强制转换一个对象,该对象内部有一个包含多个实体的linq查询

对于那些在返回匿名类型时遇到同样问题的人,我创建了一个类来获取它的返回值:

public class MemberGetaMember
{
    public int MEB_Id {get;set;}
    public string MEB_Nome { get; set;}
    public bool? MGM_Familiar { get; set; }
}

然后我可以在返回时将其强制转换:

foreach (var x in queryRoles)
            list.Add(new MemberGetaMember { MEB_Id = x.MEB_Id, MEB_Nome = x.MEB_Nome, MGM_Familiar = x.MGM_Familiar });
        return list;

这个问题帮我解决了这个问题

如何从使用LINQ到SQL的方法返回查询结果

谢谢大家。

我怀疑您需要枚举结果并强制转换为列表:

var queryRoles =  (from a in unitOfWork._ctx.MembrosMGM
                  join b in unitOfWork._ctx.Membros on a.MGM_Pai equals b.MEB_Id
                  where a.MGM_Filho == MEB_Id
                  select new { b.MEB_Nome, b.MEB_Id, a.MGM_Familiar }).ToList();