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 構文に変換できませんでした。

そのプロパティを削除して、2 つの通常のプロパティNombreApellidosを再度使用することをお勧めします。これらのプロパティを連結した列を作成するとします。その場合は、テンプレート列と次のテンプレートを作成できます。

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

これが役立つことを願っています;)

于 2012-10-27T15:58:20.777 に答える