我想使用EF4更新实体列表。
我使用Linq查询从数据库中获取相应的对象列表到名为“ requeteValsLabels ”的匿名对象 我手动完成了这个(在foreach循环中测试id),如下所示,但我想这不是最好的方法吗?
for (int i = 0; i < productToUpdate.Labels.Count; i++)
{
foreach (var item in productToUpdate.Labels)
{
if (requeteValsLabels[i].ID == item.IdValeurLabel){
requeteValsLabels[i].Valeur = item.Valeur;
}
}
}
答案 0 :(得分:2)
您可能想要使用以下模式
foreach (var item in productToUpdate.Labels) {
Entity e = new Entity { Id = item.IdValeurLabel};
context.EntitySet.Attach(e);
e.Valeur = item.Valeur;
}
这可以防止加载(选择)到数据库的行程,但是:
答案 1 :(得分:1)
我认为更有效的方法是加入集合,然后复制值:
var query = from item in productToUpdate.Labels
join label in requeteValsLabels on item.IdValeurLabel equals label.ID
select new { item, label };
foreach (var pair in query.ToList())
{
pair.label.Valuer = pair.item.Valuer;
}
答案 2 :(得分:0)
你的外环是否正确?应该是
for (int i = 0; i < requeteValsLabels.Count; i++)
您是否正在寻找更紧凑的方式来写这个?请尝试以下方法:
for (int i = 0; i < requeteValsLabels.Count; i++)
{
requeteValsLabels[i].Valeur = productToUpdate.Labels
.First(x => x.IdValeurLabel == requeteValsLabels[i].ID).Valeur;
}
小心但是......如果没有满足条件的元素,First()将抛出异常。