使用LINQ进行子选择

时间:2012-12-05 18:02:45

标签: 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
                    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子句中指定的某些条件恢复电子邮件列。

错误

  

无效的匿名类型成员声明符。匿名类型成员必须   声明成员作业,简单名称或成员访问

2 个答案:

答案 0 :(得分:2)

你的linq表达式中有2个问题:

  1. 您需要将子查询的结果分配给新匿名类型的成员。
  2. 我认为您只想选择包含子查询的1封电子邮件,因此您需要使用Single() / SingleOrDefault()First() / FirstOrDefault()
  3. 试试这个:

    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()
                    };
    

答案 1 :(得分:0)

主要是因为不可用的赋值变量发生此错误, 请试试这个 它会帮助你

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)
                        };