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

これは正常に動作しますが、foreach に入るとすぐに実行するのではなく、遅延実行を維持するために、IQueryable 結果変数に対する LINQ クエリで同じことを達成できるようにしたいと考えています。

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 に答える