Linq to Object引用列表

时间:2016-03-19 10:23:31

标签: c# linq linq-to-entities

我有两个不同的数据源,一个包含有关客户端的详细信息,另一个包含仅具有ClientID的网站,但由于系统的部分迁移,我无法在数据库级别加入它们(但最终会发生这种情况!) :

{{1}}

运行上面的代码会返回错误

  

“LINQ to Entities无法识别该方法   “CertsAssured.Model.Client.ClientSummary   查找(System.Predicate`1 [CertsAssured.Model.Client.ClientSummary])'“

我可以在此步骤之后编写代码来执行任务,但是必须将ClientId保存到我的对象中然后迭代。有没有办法在Select方法中从客户端列表中获取信息?

由于

1 个答案:

答案 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();