Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从集合中删除项同时从相关集合中删除所有项_C#_Linq_Entity Framework - Fatal编程技术网

C# 从集合中删除项同时从相关集合中删除所有项

C# 从集合中删除项同时从相关集合中删除所有项,c#,linq,entity-framework,C#,Linq,Entity Framework,请原谅我的标题有点混乱,我不知道如何最好地总结我的编码问题 我使用实体框架使用对象集合进行插入和更新。有时必须插入一个项目,因为它不存在,有时它是一个更新,因为它在数据库中。我将我的集合与数据上下文进行比较,以了解哪个是哪个 public modelClaimDatabase EditPersonDependants(modelClaimDatabase Model) { try { using (var CasaLatinaEntities = new Casa

请原谅我的标题有点混乱,我不知道如何最好地总结我的编码问题

我使用实体框架使用对象集合进行插入和更新。有时必须插入一个项目,因为它不存在,有时它是一个更新,因为它在数据库中。我将我的集合与数据上下文进行比较,以了解哪个是哪个

public modelClaimDatabase EditPersonDependants(modelClaimDatabase Model)
{
    try
    {
        using (var CasaLatinaEntities = new CasaLatinaEntities())
        {
            // Do dependants logic - first find out if there are any
            if (Model.ModelDependants.Count > 0)
            {
                // collection of dependants from Database
                var qDependants = CasaLatinaEntities.tblDependants;
                // collection of dependants from Model
                var ModelDependants = Model.ModelDependants;

                // GET all dependants from the Model that do match the DB
                var UpdateList =
                    from m in ModelDependants
                    where qDependants.Any(q => q.PersonID == m.PersonID)
                    select m;

                // GET all dependants from the Model that don't match the DB
                var InsertList =
                    from m in ModelDependants
                    where !qDependants.Any(q => q.PersonID == m.PersonID)
                    select m;

                if (InsertList.Count() > 0)
                {
                    foreach (var dependant in InsertList)
                    {
                        Model.ModelDependants.Remove(dependant);
                        CreateDependant(dependant, Model);
                        Model.ModelDependants.Add(dependant);
                    }
                }

            }
        }
    }
    catch (Exception ex)
    {
    }
    return Model;
}
当我使用这个代码时

Model.ModelDependants.Remove(dependant);
这行代码

if (InsertList.Count() > 0)
再也没有什么可以列举的了。但是,我不是从InsertList中删除,而是从模型中删除

我这样做的原因是因为

CreateDependant(dependant, Model);
我正在对该对象进行更改,然后我想用新数据将其添加回我的模型。因此,我将有一个对象集合,它将显示“这是一个新添加的行”或“您已经更新了这一行”


有谁有更好的方法来编写此代码吗?

我不能肯定,因为我没有准备好测试它,但我想知道根据您的结果创建一个新列表是否可以解决
计数问题

调用
ToList()
将创建一个新列表,因此当您从
modeldependent
中删除一个项目时,它不应该也从
InsertList
中删除

var InsertList = (from m in ModelDependants
                  where !qDependants.Any(q => q.PersonID == m.PersonID)
                  select m).ToList();

谢谢你的帮助!我做了那个改变,效果很好。