实体只有无参数构造函数和初始值设定项?

时间:2017-02-24 12:37:09

标签: c# entity-framework linq linq-to-entities

我收到此错误,

  

LINQ中仅支持无参数构造函数和初始值设定项   实体。

经过研究,这似乎是许多答案的常见问题。除了我无法对很多答案进行逆向工程,因此我可以自己解决这个问题。

我意识到答案是在错误中,但是我无法看到需要使用无参数构造函数的东西?或者在这个例子中,我甚至不知道参数甚至在哪里???

这个LINQ查询给我带来了麻烦:

public static ObservableCollection<Employee> ReturnEmployeesInSection(string section)
{
    using (StaffShiftManagerEntities dataBaseEntities = new  StaffShiftManagerEntities())
    {
          return new ObservableCollection<Employee>(dataBaseEntities.Staff_Data_TBL
             .Where(p => p.Section_Data == section && p.Staff_Bool == true)
             .Select(staff => new Employee(staff.Staff_No ?? -1,
                staff.Staff_Name_First, staff.Staff_Name_Second))
             .ToList()
             .GroupBy(staff => staff.Key)
             .Select(staff => staff.First())
             .OrderBy(staff => staff.Key)
             .ToList());
    }
}    

Employee类:

public class Employee
{
    public int Key { get; set; }
    public string FirstName { get; set; }
    public string SecondName { get; set; }
    public string FullName => FirstName + " " + SecondName;

    public Employee(int key, string first = null, string second = null)
    {
        Key = key;
        FirstName = first;
        SecondName = second;
    }
}

这是实体框架自动生成的类:

public partial class Staff_Data_TBL
{
    public long ID { get; set; }
    public byte[] Image_Col { get; set; }
    public Nullable<int> Staff_No { get; set; }
    public string Staff_Name_First { get; set; }
    public string Staff_Name_Second { get; set; }
    public string Section_Data { get; set; }
    public string Lic_Data { get; set; }
    public Nullable<System.DateTime> Start_Date { get; set; }
    public Nullable<System.DateTime> End_Date { get; set; }
    public Nullable<long> Night_1 { get; set; }
    public Nullable<long> Night_2 { get; set; }
    public Nullable<long> Lunch_Data { get; set; }
    public Nullable<long> Unples_Data { get; set; }
    public string Staff_Part { get; set; }
    public bool Staff_Kaizen { get; set; }
    public int StaffKaizenPercentage { get; set; }
    public Nullable<bool> Staff_Bool { get; set; }
    public string Group_Section_Data { get; set; }
    public string Notes { get; set; }
}

请原谅命名约定,我正在将所有内容更改为更标准的命名。

2 个答案:

答案 0 :(得分:2)

ng-class="{'couldBeWrong':rid.indexOf('1A') > -1}" 类创建公共无参数构造函数。

Employee

使用对象初始值设定项而不是带参数的构造函数:

public Employee() {}

注意:正如您所见,我在结果投影之前移动了分组和排序。因此,您将在服务器端完成所有工作,而不是将表数据加载到内存中。

答案 1 :(得分:0)

更改

public class Employee
{
    public Employee(){} //Constructor with no parameters that needs to be added

    public int Key { get; set; }
    public string FirstName { get; set; }
    public string SecondName { get; set; }
    public string FullName => FirstName + " " + SecondName;

    public Employee(int key, string first = null, string second = null)
    {
        Key = key;
        FirstName = first;
        SecondName = second;
    }
}

SELECT created_time, count(id) AS total
FROM `tweets`
WHERE created_time >= (NOW() - INTERVAL 10 DAY) AND active = 1 
GROUP BY DATE(created_time)