我有两个不同的数据源,一个包含有关客户端的详细信息,另一个包含仅具有ClientID的网站,但由于系统的部分迁移,我无法在数据库级别加入它们(但最终会发生这种情况!) :
{{1}}
运行上面的代码会返回错误
“LINQ to Entities无法识别该方法 “CertsAssured.Model.Client.ClientSummary 查找(System.Predicate`1 [CertsAssured.Model.Client.ClientSummary])'“
我可以在此步骤之后编写代码来执行任务,但是必须将ClientId保存到我的对象中然后迭代。有没有办法在Select方法中从客户端列表中获取信息?
由于
答案 0 :(得分:1)
设置数据库过滤/分页后,您可以使用AsEnumerable
将IQueryable结果转换为内存IEnumerable,您可以对clients
进行查找;
result.Content = pageResult
.AsEnumerable()
.Select(a => new QuoteSearch
{
Accepted = a.Accepted,
Created = a.Created,
Id = a.Id,
Customer = clients.Find(b => b.Id == a.ClientId).Name
}).ToList();
如果有许多数据库字段,并且您不希望从数据库中获取所有数据库字段,则可以首先过滤IQueryable上的字段,如:
result.Content = pageResult
.Select(a => new // This filters in the database
{ // to an anonymous type
Accepted = a.Accepted,
Created = a.Created,
Id = a.Id,
ClientId = a.ClientId
})
.AsEnumerable() // Convert to an IEnumerable
.Select(a => new QuoteSearch // This is done in-memory
{ // generating the real type
Accepted = a.Accepted,
Created = a.Created,
Id = a.Id,
Customer = clients.Find(b => b.Id == a.ClientId).Name
}).ToList();