函数 Return LastOrDefault()
function Return LastOrDefault()
我有 ExpesnseIDVM ViewModel,它只包含 1 个变量 ExpenseID 来保存数据库中的最后一个值
public IEnumerable<ExpesnseIDVM> Profile(LoginVM loginVM)
{
var data = (from a in context.Employees
where a.Email == loginVM.Email
join b in context.Expenses on a.EmployeeId equals b.EmployeeId
select new ExpesnseIDVM()
{ ExpenseID = b.ExpenseId }).ToList().LastOrDefault();
return data;
}
我对 return 类型有疑问,我应该使用哪种 return 类型来获取值
这里有四个问题:
- SQL 如果您不指定
OrderBy
,服务器不保证项目的顺序
- SQL没有
LastOrDefault
直接翻译。 EF 可能会尝试反转定义的 OrderBy 并调用 FirstOrDefault
- 再次 OrderBy
需要
LastOrDefault
returns 一个实例,不可枚举
ToList()
将整个 table 加载到内存中,但你只需要一条记录,所以不要使用它。
考虑按以下方式重写您的查询:
public ExpesnseIDVM Profile(LoginVM loginVM)
{
var data = (from a in context.Employees
where a.Email == loginVM.Email
join b in context.Expenses on a.EmployeeId equals b.EmployeeId
orderby b.ExpenseId descending
select new ExpesnseIDVM()
{ ExpenseID = b.ExpenseId }).FirstOrDefault();
return data;
}
你有 IQueryable?<T>
作为 linq 查询的 return 值,然后你有 .ToList()
这使得 EF 计算查询,得到 List<T>
最后 .LastOrDefault()
return 是 T
的单个对象。
我有 ExpesnseIDVM ViewModel,它只包含 1 个变量 ExpenseID 来保存数据库中的最后一个值
public IEnumerable<ExpesnseIDVM> Profile(LoginVM loginVM)
{
var data = (from a in context.Employees
where a.Email == loginVM.Email
join b in context.Expenses on a.EmployeeId equals b.EmployeeId
select new ExpesnseIDVM()
{ ExpenseID = b.ExpenseId }).ToList().LastOrDefault();
return data;
}
我对 return 类型有疑问,我应该使用哪种 return 类型来获取值
这里有四个问题:
- SQL 如果您不指定
OrderBy
,服务器不保证项目的顺序
- SQL没有
LastOrDefault
直接翻译。 EF 可能会尝试反转定义的 OrderBy 并调用FirstOrDefault
- 再次OrderBy
需要 LastOrDefault
returns 一个实例,不可枚举ToList()
将整个 table 加载到内存中,但你只需要一条记录,所以不要使用它。
考虑按以下方式重写您的查询:
public ExpesnseIDVM Profile(LoginVM loginVM)
{
var data = (from a in context.Employees
where a.Email == loginVM.Email
join b in context.Expenses on a.EmployeeId equals b.EmployeeId
orderby b.ExpenseId descending
select new ExpesnseIDVM()
{ ExpenseID = b.ExpenseId }).FirstOrDefault();
return data;
}
你有 IQueryable?<T>
作为 linq 查询的 return 值,然后你有 .ToList()
这使得 EF 计算查询,得到 List<T>
最后 .LastOrDefault()
return 是 T
的单个对象。