簡體   English   中英

實體框架中的左聯接和case子句LINQ

[英]Left join and case clause LINQ in Entity Framework

我需要進行左連接並還要使用選擇運算符。 我的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.

我該怎么辦才能左連接大小寫和字段以及格式化的字段

嘗試在變量中設置字符串,然后將其分配給您的查詢,如下所示:

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

嘗試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM