【问题标题】:Subselect with LINQ使用 LINQ 进行子选择
【发布时间】:2012-12-29 23:00:37
【问题描述】:

我想用 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 子句中指定的一些条件恢复一个电子邮件列。

错误

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

【问题讨论】:

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

标签: linq


【解决方案1】:

您的 linq 表达式有 2 个问题:

  1. 您需要将子查询的结果分配给新匿名类型的成员。
  2. 我认为您只想在子查询中选择 1 封电子邮件,因此您需要使用 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()
                };

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多