0

我所拥有的是一个从数据库返回的实体列表,我想要对其进行透视,以便最终得到一个新的实体列表,其中删除了重复项并将透视项附加到新实体。

目前我有一个这样的简单解决方案:

        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,然后我想在应用所有过滤器后执行对数据库的调用。

希望一切都说得通。

4

1 回答 1

0

也许这会减少一些循环。

 List<Entity> pivotedEntities = new List<Entity>();
        int index = 0;
        foreach (Entity entity in results)
        {
            index = pivotedEntities.IndexOf(e => e.Id == entity.Id);
            if (index>-1)
            {
                pivotedEntities[index].RelatedEntities.Add(entity.RelatedEntity);
            }
            else
            {
                pivotedEntities.Add(new Entity());
            }
        }

        return pivotedEntities.AsQueryable();
于 2013-07-23T12:33:38.913 回答