我所拥有的是一个从数据库返回的实体列表,我想要对其进行透视,以便最终得到一个新的实体列表,其中删除了重复项并将透视项附加到新实体。
目前我有一个这样的简单解决方案:
IQueryable<Entity> results // being passed in from calling method.
List<Entity> pivotedEntities = new List<Entity>();
foreach (Entity entity in results)
{
if (pivotedEntities.Contains(entity))
{
Entity matchedEntity = pivotedEntities.Find(e => e.Id == entity.Id);
matchedEntity.RelatedEntities.Add(entity.RelatedEntity);
}
else
{
pivotedEntities.Add(new Entity());
}
}
return pivotedEntities.AsQueryable();
这很好用,但是我希望能够通过对 IQueryable 结果变量的 LINQ 查询来实现相同的目的,以便它保持其延迟执行,而不是在我进入 foreach 时立即执行。
我有其他方法可以围绕此代码调用,这些方法也会改变 IQueryable,然后我想在应用所有过滤器后执行对数据库的调用。
希望一切都说得通。