我想在查询中使用列表中预加载的查找数据。我需要查询作为 IQueryable 返回,因为它在网格中使用并被分页(此处不包括)。我需要从查找中加载标签以避免连接(更多内容在实际代码中)。
我知道我可以执行 ToList() 并对其进行后处理,但我需要 IQueryable。这是代码:
// Run in intialization other code...
var contactLookups = new ContactsDbContext();
List<StatusType> _statusTypes = contactLookups.StatusTypes.ToList();
public IQueryable GetQuery()
{
var contactsCtx = new ContactsDbContext();
IQueryable query = contactsCtx.Select(contact => new
{
Id = contact.Id,
FullName = contact.FirstName + " " + contact.LastName,
CompanyName = contact.CompanyName,
Status = _statusTypes.FirstOrDefault(l => contact.StatusId == l.Id).Label
});
return query;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码会引发错误,因为 EF/LINQ 无法将内存中的列表形成为 SQL(出于明显的原因)——除非添加/更改了某些内容。
我想以某种方式告诉 EF 在 SQL 之后应用查找或达到此效果。我读过有关使用 EF Helper 代码和表达式执行类似操作的内容,但我找不到那篇文章了。
请注意,我对查找本身很灵活。唯一不可协商的是“contact.StatusId”(int),但结构的其余部分“_statusTypes.FirstOrDefault(l => contact.StatusId …