我所拥有的是一个从我想要转移的数据库返回的实体列表,这样我最终得到了一个新的实体列表,其中删除了重复项并将透视项附加到新实体。
目前我有一个简单的解决方案:
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,然后我想在应用所有过滤器后执行对数据库的调用。
希望一切都有意义。
答案 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();