Get EntityFramework将实体添加为gridview数据源

Get EntityFramework将实体添加为gridview数据源,gridview,entity-framework-4,Gridview,Entity Framework 4,在EntityFramework 4中,从以下位置获取实体的正确方法是: -数据库(减去已删除的对象), -并在内存中添加了一个 要在网格视图中显示它们 使用linq获取数据库中当前的数据。 使用ObjectStateManager.GetObjectStateEntries(entityState)。选择(ent=>ent.Entity)。OfType(),我将获得添加和/或删除的(根据需要) 使用linq to entities,我将在查询结果中获得已删除的对象,因此它们将显示在gridve

在EntityFramework 4中,从以下位置获取实体的正确方法是:
-数据库(减去已删除的对象),
-并在内存中添加了一个
要在网格视图中显示它们

使用linq获取数据库中当前的数据。
使用
ObjectStateManager.GetObjectStateEntries(entityState)。选择(ent=>ent.Entity)。OfType()
,我将获得添加和/或删除的(根据需要)

使用linq to entities,我将在查询结果中获得已删除的对象,因此它们将显示在gridvew中(以及已修改和未更改的对象),但这不是我想要的,我不想要删除的对象

我需要的是在gridview中显示当前数据库中的所有数据,除了删除的对象,以及内存中添加的对象。(在调用Savechanges之前执行所有这些操作)

我在BL类中有一个方法,它返回一个类型化集合,并用它设置一个gridview数据源。
要实现这一点,我需要:
-用于检索数据库数据(比如Collection1)的linq到实体,
-GetObjectStateEntries(已删除)以获取已删除的实体(Collection2),
-GetObjectStateEntries(已添加)以添加新的内存(Collection3)

然后迭代Collection1.ToList()以删除Collection2中的项,然后与Collection3合并。

这很有效,但我不喜欢

有更好/合适的方法吗?有什么帮助/建议吗

提前准备好

以下是一些代码。
获取数据库实体的方法(此处包括已删除的对象):

public IEnumerable GetConnectorTransformation查找概念视图(int-idConnectorTransformation)
{
var数据=来自Entities.ConnectorTransformationLookUpConcept中的r
在Entities.LookUpConcept上加入c。r.IdLookUpConcept上的LookUpConcept等于c.IdLookUpConcept
....
return excludedeledded(data).Union(AddedData(idConnectorTransformation)).OrderBy(e=>e.Concept);
}
方法删除已删除的对象(在上一次返回中调用):

private List excludedelected(IEnumerable集合)
{
List l=collection.ToList();
var deleted=GetDeletedEntities();
foreach(删除中的ConnectorTransformationLookUpConcept d)
{
ConnectorTransformationLookUpConceptData o=l.Find(c=>c.IDConnConTransf==d.IdConnectorTransformation&&c.IdLookUpConcept==d.IdLookUpConcept);
如果(o!=null)l.Remove(o);
}
返回l;
}
方法,该方法最终由以前的“AddedData”和“GetDeletedEntities”调用调用,这些调用返回所需的对象(在EntityState.Added或EntityState.Deleted中)

受保护的IEnumerable GetEntities(EntityState EntityState)
{
IEnumerable数据=
此文件为.Entities.ObjectStateManager。
GetObjectStateEntries(entityState)。
选择(ent=>ent.Entity)。
of type();
返回数据;
}

如果您可以格式化代码,使其呈现为代码,那就太好了。我不清楚你在问什么:你在上面写道,你想显示数据库中的实体和内存中的实体。最后你说联合von Collection2和Collection3有效,但你不喜欢。你问我怎么做?我不知道你的意思;你想干什么?谢谢你的三四一六一三。我需要的是显示数据库中的实体,但不包括删除的实体,再加上新添加的实体(在内存中,直到SaveChanges),我已经做到了,但我发现这有点棘手,我想知道是否有更好的方法。我添加了一些代码(我删除linq以使其更短,并且不知道如何将代码粘贴到其原始的有用颜色,抱歉)
public IEnumerable<ConnectorTransformationLookUpConceptData> GetConnectorTransformationLookUpConceptsView(int idConnectorTransformation)
    {
    var data = from r in Entities.ConnectorTransformationLookUpConcept
               join c in Entities.LookUpConcept on r.IdLookUpConcept equals c.IdLookUpConcept
               ....

    return ExcludeDeleted(data).Union(AddedData(idConnectorTransformation)).OrderBy(e => e.Concept);
    }
private List<ConnectorTransformationLookUpConceptData> ExcludeDeleted(IEnumerable<ConnectorTransformationLookUpConceptData> collection)
    {
        List<ConnectorTransformationLookUpConceptData> l = collection.ToList();
        var deleted = GetDeletedEntities<ConnectorTransformationLookUpConcept>();

        foreach (ConnectorTransformationLookUpConcept d in deleted)
        {
            ConnectorTransformationLookUpConceptData o = l.Find(c => c.idConnTransf == d.IdConnectorTransformation && c.idLooUpConcept == d.IdLookUpConcept);
            if (o != null) l.Remove(o);
        }

        return l;
    }
protected IEnumerable<IEntityWithKey> GetEntities<IEntityWithKey>(EntityState entityState)
    {
        IEnumerable<IEntityWithKey> data =
        this.Entities.ObjectStateManager.
            GetObjectStateEntries(entityState).
            Select(ent => ent.Entity).
            OfType<IEntityWithKey>();
        return data;
    }