0

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句で指定されているいくつかの条件に従って、電子メール列を回復したいと考えています。

エラー

匿名型メンバー宣言子が無効です。匿名型のメンバーは、メンバーの割り当て、単純な名前、またはメンバー アクセスを使用して宣言する必要があります

4

2 に答える 2

2

linq 式には 2 つの問題があります。

  1. サブクエリの結果を新しい匿名型のメンバーに割り当てる必要があります。
  2. Single()サブクエリで1つのメールのみを選択したいので、 /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()
                };
于 2012-12-29T14:53:31.770 に答える
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)
                        };
于 2012-12-29T14:18:21.413 に答える