请原谅稍微令人困惑的标题,我不知道如何最好地总结我的编码问题。
我正在使用实体框架来使用对象集合来执行INSERTS和UPDATES。有时必须插入一个项目,因为它不存在,有时它是更新,因为它在数据库中。我将我的集合与数据上下文进行比较,以了解哪个是。
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);
我正在对该对象进行更改,然后我想用新数据将其添加回我的模型。所以我将有一个对象的集合,它们会说“这是添加的新行”或“你已经更新了这一行”。
有没有人有更好的方法来编写这段代码?
答案 0 :(得分:2)
我无法肯定地说,因为我没有设置测试它,但我想知道从结果中创建新列表是否会解决Count
问题。
致电ToList()
会创建一个新列表,因此当您从ModelDependants
移除某个项目时,也不应将其从InsertList
移除。
var InsertList = (from m in ModelDependants
where !qDependants.Any(q => q.PersonID == m.PersonID)
select m).ToList();