使用LINQ进行子选择

使用LINQ进行子选择,linq,Linq,我想用LINQ做一个子选择 我所拥有的,但不正确 var diretores = from item in db.San_PropostaConversa join sc in db.San_Credenciada on (item.Credenciada_Id) equals sc.Credenciada_Id join sp in db.San_Proposta

我想用LINQ做一个子选择

我所拥有的,但不正确

var diretores = from item in db.San_PropostaConversa
                join sc in db.San_Credenciada
                    on (item.Credenciada_Id) equals sc.Credenciada_Id
                join sp in db.San_Proposta
                    on (item.Proposta_Id) equals sp.Proposta_Id
                join si in db.San_Imovel
                    on (sp.Imovel_Id) equals si.Imovel_Id
                join su in db.San_Usuario
                    on (item.Usuario_Id) equals su.Usuario_Id
                where item.Proposta_Id == proposta
                orderby item.DataHora descending
                select new
                {
                    sc.Apelido,
                    su.NomeCompleto,
                    su.DescricaoCargo1,
                    item.Comentario,
                    item.DataHora,
                    sp.Imovel_Id,
                    CredenciadaCaptadora_Id = si.Credenciada_Id,
                    item.Credenciada_Id,
                    (from item2 in db.San_Usuario
                     where item2.Cargo_Id == 9
                        && item2.Excluido == 0
                        && item2.Credenciada_Id == item.Credenciada_Id
                     select item2.Email)
                };
在我的
SELECT
语句中,我希望按照我的
WHERE
子句中指定的一些条件恢复电子邮件列

错误

无效的匿名类型成员声明符。匿名类型成员必须 使用成员分配、简单名称或成员访问权限声明


这种错误主要发生在分配变量不可用时, 请试试这个 它会帮助你的

var diretores = from item in db.San_PropostaConversa
                        join sc in db.San_Credenciada
                        on (item.Credenciada_Id) equals sc.Credenciada_Id
                        join sp in db.San_Proposta
                        on (item.Proposta_Id) equals sp.Proposta_Id
                        join si in db.San_Imovel
                        on (sp.Imovel_Id) equals si.Imovel_Id
                        join su in db.San_Usuario
                        on (item.Usuario_Id) equals su.Usuario_Id
                        where item.Proposta_Id == proposta
                        orderby item.DataHora descending
                        select new
                        {
                        Apelido=sc.Apelido,
                        NomeCompleto=su.NomeCompleto,
                        DescricaoCargo1=su.DescricaoCargo1,
                        Comentario=item.Comentario,
                        DataHora=item.DataHora,
                        Imovel_Id=sp.Imovel_Id,
                            CredenciadaCaptadora_Id = si.Credenciada_Id,
                        Credenciada_Id= item.Credenciada_Id,
                          result=  (from item2 in db.San_Usuario
                                 where item2.Cargo_Id == 9
                                 && item2.Excluido == 0
                                 && item2.Credenciada_Id == item.Credenciada_Id
                                 select item2.Email)
                        };

linq表达式中有两个问题:

  • 您需要将子查询的结果分配给新匿名类型的成员
  • 我认为您只希望在子查询中选择一封电子邮件,因此需要使用
    Single()
    /
    SingleOrDefault()
    First()
    /
    FirstOrDefault()
  • 试试这个:

    var diretores = from item in db.San_PropostaConversa
                    join sc in db.San_Credenciada
                        on item.Credenciada_Id equals sc.Credenciada_Id
                    join sp in db.San_Proposta
                        on (item.Proposta_Id) equals sp.Proposta_Id
                    join si in db.San_Imovel
                        on sp.Imovel_Id equals si.Imovel_Id
                    join su in db.San_Usuario
                        on item.Usuario_Id equals su.Usuario_Id
                    where item.Proposta_Id == proposta
                    orderby item.DataHora descending
                    select new
                    {
                        Apelido = sc.Apelido,
                        NomeCompleto = su.NomeCompleto,
                        DescricaoCargo1 = su.DescricaoCargo1,
                        Comentario = item.Comentario,
                        DataHora = item.DataHora,
                        Imovel_Id = sp.Imovel_Id,
                        CredenciadaCaptadora_Id = si.Credenciada_Id,
                        Credenciada_Id = item.Credenciada_Id,
                        Email = (from item2 in db.San_Usuario
                                 where item2.Cargo_Id == 9
                                    && item2.Excluido == 0
                                    && item2.Credenciada_Id == item.Credenciada_Id
                                 select item2.Email).FirstOrDefault()
                    };
    

    是什么阻止你这么做?您尝试了什么吗?错误消息告诉您:“必须使用成员分配、简单名称或成员访问权限声明匿名类型成员”。这就是您的确切原因和解决方案。@usr如果OP理解了错误消息,他就不会在这里发布问题。你的评论不是很有建设性,也很刻薄。@david.s在谷歌上搜索这条消息会找到一些解释。我认为这个问题没有帮助,因为它不会给网络添加新信息。我们有太多这样的问题:“我既没读过也没用谷歌搜索过这条消息”。这会导致(双方)浪费大量时间。