LINQ to实体不支持指定的类型成员'fullname' [英] The specified type member 'fullname' is not supported in LINQ to entities

查看:62
本文介绍了LINQ to实体不支持指定的类型成员'fullname'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有服务器端处理的jQuery DataTable,这给了我循环依赖问题。



我必须在我的DataTable中列出属于另一个类的字段`Administrator`。如果我将它包含在代码中,我会使用Ajax获得依赖性错误,例如



> DataTables警告:表id = datatableServer-Ajax错误。



有没有办法解决这个问题?



我的尝试:



**部门类**



公共类部门
{
public int DepartmentID {get;组; }

[StringLength(50,MinimumLength = 3)]
public string Name {get;组; }

[DataType(DataType.Currency)]
[Column(TypeName =money)]
public decimal Budget {get;组; }

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString ={0:yyyy-MM-dd},ApplyFormatInEditMode = true)]
[显示( Name =Start Date)]
public DateTime StartDate {get;组; }

[显示(名称=管理员)]
public int? InstructorID {get;组; }

[时间戳]
public byte [] RowVersion {get;组; }

public virtual Instructor Administrator {get;组; }
public virtual ICollection< Course>课程{get;组; }
}





**导师**

 public class Instructor:Person 
{
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString ={0:yyyy-MM-dd},ApplyFormatInEditMode = true)]
[显示(姓名=雇用日期)]
public DateTime HireDate {get;组; }

公共虚拟ICollection<课程>课程{get;组; }
public virtual OfficeAssignment OfficeAssignment {get;组; }
}





**控制器**



 public ActionResult DataHandler([ModelBinder(typeof(DataTablesBinder))] IDataTablesRequest requestModel)
{
// IQueryable< Department> query = departmentService.GetDepartments();

IQueryable< Department>查询;

使用(SchoolContext db = new SchoolContext())
{
query = db.Departments;

var totalCount = query.Count();

//应用过滤器搜索
if(requestModel.Search.Value!= string.Empty)
{
var value = requestModel.Search.Value.Trim ();
query = query.Where(p => p.Name.Contains(value)
// || p.Administrator.FullName.Contains(value));
}

var filteredCount = query.Count();

//排序
var sortedColumns = requestModel.Columns.GetSortedColumns();
var orderByString = String.Empty;

foreach(sortedColumns中的var列)
{
orderByString + = orderByString!= String.Empty? ,:;
orderByString + =(column.Data)+
(column.SortDirection ==
Column.OrderDirection.Ascendant?asc:desc);
}

query = query.OrderBy(orderByString ==
string.Empty?BarCode asc:orderByString);

//分页
query = query.Skip(requestModel.Start).Take(requestModel.Length);

var data = query.Select(a => new
{
Name = a.Name,
Budget = a.Budget,
StartDate = a.StartDate,
// Administrator = a.Administrator.FullName
})。ToList();

返回Json(new DataTablesResponse
(requestModel.Draw,data,filteredCount,totalCount),
JsonRequestBehavior.AllowGet);
}
}





**脚本**



 $(document).ready(function(){

$('#datatable')。dataTable(); //客户端数据表

var departmentsList;
$(function(){
departmentsList = {
dt:null,

init:function(){
//服务器端dataTable
dt = $('#datatableServer')。DataTable({
serverSide:true,
processing:true,
ajax :{
url:
@ Url.Action(DataHandler,Department)
},
columns:[
{ data:Name,
searchable:true},
{data:Budget,
searchable:true},
{data:StartDate,
searchable:true}
// {data:Administrator,
/ /searchable:true}
],
lengthMenu:[[10,25,50,100],[10,25,50,100]],
});
}
}
//初始化数据表
departmentsList.init();
});
});

解决方案

(document).ready(function(){


< blockquote>('#datatable')。dataTable(); //客户端数据表

var departmentsList;


(function(){
departmentsList = {
dt:null,

init:function(){
//服务器端dataTable
dt =


I have a jQuery DataTable with server-side processing which is giving me circular dependency issue.

I have to list a field `Administrator` in my DataTable that belongs to another class. If I include it in the code, I get dependency errors with Ajax like

> DataTables warning: table id=datatableServer-Ajax error.

Is there a way to fix this issue?

What I have tried:

**Department class**

public class Department
   {
       public int DepartmentID { get; set; }

       [StringLength(50, MinimumLength = 3)]
       public string Name { get; set; }

       [DataType(DataType.Currency)]
       [Column(TypeName = "money")]
       public decimal Budget { get; set; }

       [DataType(DataType.Date)]
       [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
       [Display(Name = "Start Date")]
       public DateTime StartDate { get; set; }

       [Display(Name = "Administrator")]
       public int? InstructorID { get; set; }

       [Timestamp]
       public byte[] RowVersion { get; set; }

       public virtual Instructor Administrator { get; set; }
       public virtual ICollection<Course> Courses { get; set; }
   }



**Instructor**

public class Instructor : Person
    {
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        [Display(Name = "Hire Date")]
        public DateTime HireDate { get; set; }

        public virtual ICollection<Course> Courses { get; set; }
        public virtual OfficeAssignment OfficeAssignment { get; set; }
    }



**Controller**

public ActionResult DataHandler([ModelBinder(typeof(DataTablesBinder))] IDataTablesRequest requestModel)
    {
        //IQueryable<Department> query = departmentService.GetDepartments();

        IQueryable<Department> query;

        using (SchoolContext db = new SchoolContext())
        {
            query = db.Departments;

            var totalCount = query.Count();

            // Apply filters for searching
            if (requestModel.Search.Value != string.Empty)
            {
                var value = requestModel.Search.Value.Trim();
                query = query.Where(p => p.Name.Contains(value) 
                //|| p.Administrator.FullName.Contains(value));                                                                                                  
            }

            var filteredCount = query.Count();

            // Sorting
            var sortedColumns = requestModel.Columns.GetSortedColumns();
            var orderByString = String.Empty;

            foreach (var column in sortedColumns)
            {
                orderByString += orderByString != String.Empty ? "," : "";
                orderByString += (column.Data) +
                  (column.SortDirection ==
                  Column.OrderDirection.Ascendant ? " asc" : " desc");
            }

            query = query.OrderBy(orderByString ==
            string.Empty ? "BarCode asc" : orderByString);

            // Paging
            query = query.Skip(requestModel.Start).Take(requestModel.Length);

            var data = query.Select(a => new
            {
                Name = a.Name,
                Budget = a.Budget,
                StartDate = a.StartDate,
                //Administrator = a.Administrator.FullName
            }).ToList();

            return Json(new DataTablesResponse
            (requestModel.Draw, data, filteredCount, totalCount),
                        JsonRequestBehavior.AllowGet);
        }
    }



**Script**

$(document).ready(function () {

        $('#datatable').dataTable();  //client side datatable

        var departmentsList;
        $(function () {
            departmentsList = {
                dt: null,

                init: function () {
                    //Server-side dataTable
                    dt = $('#datatableServer').DataTable({
                        "serverSide": true,
                        "processing": true,
                        "ajax": {
                            "url":
                            "@Url.Action("DataHandler","Department")"
                        },
                        "columns": [
                            { "data": "Name",
                            "searchable": true },
                            { "data": "Budget",
                            "searchable": true },
                            { "data": "StartDate",
                            "searchable": true }
                            //{ "data": "Administrator",
                            //"searchable": true }
                        ],
                        "lengthMenu": [[10, 25, 50, 100], [10, 25, 50, 100]],
                    });
                }
            }
            // initialize the datatables
            departmentsList.init();
        });
    });

解决方案

(document).ready(function () {


('#datatable').dataTable(); //client side datatable var departmentsList;


(function () { departmentsList = { dt: null, init: function () { //Server-side dataTable dt =


这篇关于LINQ to实体不支持指定的类型成员'fullname'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆