1

大家好,感谢您抽出时间帮助我。

我正在测试 KendoUI,我正在尝试使用 AJAX 绑定网格,但我收到错误

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

我的模型看起来像这样

项目模型

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

}

乌苏里奥模型

    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 查询或模型以在网格中获取全名

再次感谢您的时间。

问候

4

2 回答 2

2

您可以尝试将“结果”定义更改为以下

DataSourceResult result = proyectos.AsEnumerable().Select(x => x).ToDataSourceResult(request, o => new
        {
            ProyectoID = o.ProyectoID,
            OCCliente = o.OCCliente,
            FullName = o.Usuario.getFullName,
            Descripcion = o.Descripcion
        });
于 2015-06-02T01:52:00.490 回答
1

ViewModel 的名为getFullName的虚拟字符串属性中的自定义逻辑无法转换为 SQL 语法。

我建议您删除该属性并再次使用两个常规属性NombreApellidos。我假设您要创建一个列,该列是这些属性的串联。如果是这样,您可以创建一个模板列和以下模板:

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

我希望这有帮助 ;)

于 2012-10-27T15:58:20.777 回答