【问题标题】:Left join and case clause LINQ in Entity Framework实体框架中的左连接和案例子句 LINQ
【发布时间】:2014-05-28 23:53:06
【问题描述】:

我需要进行左连接并使用选择运算符的情况。 我的 LINQ 基础是这样的并且有效:

resultado.Dados =
    (
        from a in db.AgendaHorario
        join b in db.Agenda on a.AgendaID equals b.AgendaID
        join c in db.Profissional on a.ProfissionalID equals c.ProfissionalID into d
        from e in d.DefaultIfEmpty()                        
        select new
        {
            id = a.AgendaHorarioID,
            Medico = e.Identificacao     
        });

但我必须添加一个新字段并且它应该被格式化,然后我的 LINQ 看起来像这样:

resultado.Dados =
  (
    from a in db.AgendaHorario
    join b in db.Agenda on a.AgendaID equals b.AgendaID
    join c in db.Profissional on a.ProfissionalID equals c.ProfissionalID into d
    from e in d.DefaultIfEmpty()                        
    select new
    {
        id = a.AgendaHorarioID,
        Medico = e.Identificacao,
        start = a.Horario.ToString("yyyy-MM-dd HH:mm:ss")            
    }
  );

发生此错误:

LINQ to Entities does not recognize the method 'System.String ToString(System.String)' method, and this method cannot be translated into a store expression.

如果在db.AgendaHorario.ToList()db.Agenda.ToList()db.Profissional.ToList() 中添加 ToList() 或 AsEnumerable() 出现的错误是:

Object reference not set to an instance of an object.

我应该怎么做才能与案例和字段以及格式化字段进行左连接

【问题讨论】:

    标签: c# asp.net linq entity-framework


    【解决方案1】:

    试试这个:

    resultado.Dados =
    (
        from a in db.AgendaHorario
        join b in db.Agenda on a.AgendaID equals b.AgendaID
        join c in db.Profissional on a.ProfissionalID equals c.ProfissionalID into d
        from e in d.DefaultIfEmpty()                        
        select new
        {
            id = a.AgendaHorarioID,
            Medico = e.Identificacao,
            start = a.Horario
        }).AsEnumerable().Select(x => new
        {
            id = x.id,
            Medico = x.Medico,
            start = x.start.ToString("yyyy-MM-dd HH:mm:ss")            
        }
    );
    

    【讨论】:

      【解决方案2】:

      尝试在变量中设置字符串,然后将其分配给您的查询,如下所示:

      var myValue = Horario.ToString("yyyy-MM-dd HH:mm:ss");
      
      resultado.Dados =   (
      from a in db.AgendaHorario
      join b in db.Agenda on a.AgendaID equals b.AgendaID
      join c in db.Profissional on a.ProfissionalID equals c.ProfissionalID into d
      from e in d.DefaultIfEmpty()                        
      select new
      {
          id = a.AgendaHorarioID,
          Medico = e.Identificacao,
          start = myValue             
      }   );
      

      【讨论】:

      • 对不起,我不明白。您传递的代码不起作用。
      • 上述代码的第一行需要由您的 db.AgendaHorario 提供,因此您需要修改该行以获得您的值
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多