2012-10-26 50 views
1

大家好,謝謝你的時間幫助我。LINQ to Entities不支持指定的類型成員。使用JSON,KendoUI,AJAX

我測試KendoUI,我嘗試使用AJAX結合網格,但我得到的錯誤

The specified type member 'getFullName' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported. 

我的模型看起來像這樣

PROYECTOS型號

public class Proyecto 
{ 

    [Required] 
    [Key] 
    [Display(Name = "Num. Proyecto")] 
    public virtual String ProyectoID { get; set; } 

    [Required] 
    [Display(Name = "ID Usuario")] 
    public virtual int UserID { get; set; } 

    [Required] 
    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)] 
    [Display(Name = "Fecha De Inicio")] 
    public virtual DateTime FechaInicio { get; set; } 

    [Required] 
    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)] 
    [Display(Name = "Fecha de Fin")] 
    public virtual DateTime FechaFin { get; set; } 

    [Display(Name = "Descripcion")] 
    public virtual String Descripcion { get; set; } 

    [Required] 
    [Display(Name = "Status")] 
    public virtual int StatusID { get; set; } 


    public virtual ICollection<Comentario> Comentarios { get; set; } 
    public virtual ICollection<Abono> Abonos{ get; set; } 
    public virtual ICollection<Cargo> Cargos{ get; set; } 
    public virtual ICollection<Status> Status { get; set; } 
    public virtual Usuario Usuario { get; set; } 

} 

Usuario Model

public class Usuario 
{ 
    [Required] 
    [Key] 
    [Display(Name = "Id")] 
    public virtual int UserID { get; set; } 

    [Required] 
    [Display(Name = "Usuario")] 
    public virtual String UserName { get; set; } 

    [Required] 
    [Display(Name = "Password")] 
    public virtual String Password{ get; set; } 

    [Required] 
    [Display(Name = "Nombre")] 
    public virtual String Nombre { get; set; } 

    [Display(Name = "Apellidos")] 
    public virtual String Apellidos{ get; set; } 

    [Display(Name = "Email")] 
    public virtual String Email { get; set; } 

    [Required] 
    [Display(Name = "Nivel")] 
    public virtual int Nivel { get; set; } 

    public virtual ICollection<Proyecto> Proyectos { get; set; } 
    public virtual ICollection<Comentario> Comentarios { get; set; } 

    [Display (Name="Responsable")] 
    public virtual string getFullName 
    { 
     get { 
      return Nombre + " " + Apellidos; 
     } 

    } 

} 

在PROYECTO控制器我有這樣的方法(如錯誤發生)

public ActionResult Proyectos_Read([DataSourceRequest]DataSourceRequest request) 
    { 
     db.Configuration.ProxyCreationEnabled = false; 
     var proyectos = from e in db.Proyectos.Include(c => c.Usuario) select e; 


     DataSourceResult result = proyectos.ToDataSourceResult(request, o => new 
     { 
      ProyectoID = o.ProyectoID, 
      OCCliente = o.OCCliente, 
      FullName = o.Usuario.getFullName, 
      Descripcion = o.Descripcion 
     }); 



     return Json(result, JsonRequestBehavior.AllowGet); 
    } 

終於這是我的看法

@(Html.Kendo().Grid<NTSMvc.Models.Proyecto>() 
         .Name("Grid") 
         .Columns(columns => 
          { 
           columns.Bound(p => p.ProyectoID).Filterable(true).Groupable(true); 
           columns.Bound(p => p.OCCliente); 
           columns.Bound(p => p.Usuario.getFullName); 
           columns.Bound(p => p.Descripcion); 
          }) 
          .DataSource(datasource => datasource 
           .Ajax() 
           .Read(read => read.Action("Proyectos_Read","Proyectos")) 
           .PageSize(5) 
          ) 
          .Filterable() 
          .Groupable()        
          .Pageable()         
        )    

我是如何改變我的LINQ查詢還是我的模型在網格中獲取全名

再次感謝您的時間。

問候

回答

1

虛擬串屬性內的自定義邏輯稱爲您的視圖模型的getFullName無法轉換爲SQL語法。

我建議你刪除該財產,然後再次使用兩次常規性農佈雷Apellidos。我假設你想創建一個連接這些屬性的列。如果是這樣,你可以創建一個模板列,下面的模板:

Html.Kendo().Grid... 
... 
Columns(cols=>{ 
    cols.Template(@<text></text>).Title("Full Name").ClientTemplate("#: Nombre # #: Apellidos #") 
}) 

我希望這有助於;)

+0

是的,我想要在列中顯示完整的名稱,我會試試這個,非常感謝! –

1

您可以嘗試改變「結果」的定義以下

DataSourceResult result = proyectos.AsEnumerable().Select(x => x).ToDataSourceResult(request, o => new 
     { 
      ProyectoID = o.ProyectoID, 
      OCCliente = o.OCCliente, 
      FullName = o.Usuario.getFullName, 
      Descripcion = o.Descripcion 
     }); 
+0

這對我來說很有幫助 –

相關問題