选择与Linq to Entities不同

时间:2016-11-02 18:39:17

标签: c# entity-framework linq

问题asked here的扩展,我正在努力做同样的功能,即

IEnumerable<Customer> filteredList = originalList
  .GroupBy(customer => customer.CustomerId)
  .Select(group => group.First());

在评论中,暗示如果它是Linq to Entities并且当然不适用于我,这将无法工作,我得到一个空结果集。

  

对我不起作用!即使我尝试'FirstOrDefault'它也没有用。 - JatSing 2011年9月25日13:55

     

@JatSing:您必须使用Linq to Entities。 - Josh Mouch 12年12月14日14:45

因此,如果以上内容对Linq to Entities不起作用,我将如何分组由两列组成的EntityType消息的IEnumerable,然后获取每个组的第一行?

1 个答案:

答案 0 :(得分:0)

如果您对通过实体框架等评估LINQ表达式的方式存在问题,可以调用.ToList()强制将查询实现到内存中以进行进一步处理。如果您从数据库或其他来源获得的结果非常昂贵,并且可以先进一步缩小,那么这不太理想。

IEnumerable<Customer> filteredList = originalList
  .ToList()
  .GroupBy(customer => customer.CustomerId)
  .Select(group => group.First());

.ToList()调用使实体框架从数据库加载完整的originalList(我假设它是某种类型的IQueryable<T>),允许.GroupBy(...)进行评估内存取决于originalList的完整结果,而不是SQL查询EF构建的一部分。