OrmLite Select с возвращаемым типом не динамический - PullRequest
0 голосов
/ 24 октября 2019

в простом примере, подобном этому

var query = db.From<Employee>()
    .Join<Department>()
    .OrderBy(e => e.Id)
    .Select<Employee, Department>((employee, department) => new { 
        employee.Id, 
        employee.LastName, 
        DepartmentName = department.Name 
    }
);

если у меня есть класс, определенный для типа возвращаемого значения

public class EmployeeWithDept {
    public int Id {get;set}
    public string LastName {get;set}
    public string DepartmentName {get;set}
}

Могу ли я явно написать свой .Select() для возврата EmployeeWithDept?

var query = db.From<Employee>()
    .Join<Department>()
    .OrderBy(e => e.Id)
    .Select<Employee, Department>((employee, department) => new EmployeeWithDept { 
        employee.Id, 
        employee.LastName, 
        DepartmentName = department.Name 
    }
);

Ответы [ 2 ]

1 голос
/ 26 октября 2019

Поскольку вы звоните db.From<Employee>, возвращаемый тип переменной - SqlExpression<Employee>.

Так что вы можете назвать его так:

var query = db.From<Employee>()
    .Join<Department>()
    .OrderBy(e => e.Id)
    .Select<Employee, Department>((employee, department) => new { 
        Id = Sql.As(employee.Id, nameof(EmployeeWithDept.Id)), 
        LastName = Sql.As(employee.LastName, nameof(EmployeeWithDept.LastName)), 
        DepartmentName = Sql.As(department.Name, nameof(EmployeeWithDept.DepartmentName))
    }
);
var result = db.Select<EmployeeWithDept>(query);

Это должно работать.

1 голос
/ 25 октября 2019

Согласно документам , да. Очень возможно получить ваш результат POCO, если вы будете следовать соглашениям об именах или украшать свои типы правильными атрибутами.

Это должно быть так просто, как:

var query = db.From<Employee>()
    .Join<Department>()
    .OrderBy(e => e.Id);

var esWithDs = db.Select<EmployeeWithDept>(query);
...