【发布时间】:2018-08-08 12:11:58
【问题描述】:
我不希望返回所有列,所以我试图从 EMPLOYEES 中选择一些列,运行以下代码时出现错误:
var query = db.EMPLOYEES.AsQueryable();
query = ApplyFilter(query, filter);
var result = query.Select(x => new EMPLOYEE_DTO()
{
PHONE_NO = x.PHONE_NO,
EMAIL = x.EMAIL,
EMP_NO = x.EMP_NO
}).ToList();
private IQueryable<EMPLOYEE> ApplyFilter(IQueryable<EMPLOYEE> query, EmployeesFilter filter)
{
if (!string.IsNullOrEmpty(filter.EMAIL))
query = query.Where(u => u.EMAIL.ToLower().Contains(filter.EMAIL.ToLower()));
return query;
}
错误是:{“无法创建类型为 'System.Collections.Generic.List`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089] 的空常量值] ]'。在此上下文中仅支持实体类型、枚举类型或原始类型。"}
我看到一个帖子说使用DTO对象(EMPLOYEE_DTO)可以解决问题,但问题仍然存在。
请指教。
【问题讨论】:
-
要了解问题是在您的查询中还是在您的选择中,如果您执行
query.ToList()会发生什么? -
我认为是 DTO 对象中的问题,但它也在不使用 DTO 的情况下发生。问题出在 ApplyFilter 函数“query = query.Where(u => filter.SelectedIds.Contains(u.EMP_NO));”中为 null 的过滤器值中。 SelectedIds 为空。感谢您的提示,它解决了这个问题。
标签: entity-framework linq linq-to-sql linq-to-entities