Pivot在C#中使用LINQ的实体列表

时间:2013-07-23 11:41:31

标签: c# linq pivot

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

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

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

希望一切都有意义。

1 个答案:

答案 0 :(得分: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();