使用LINQ将几个项添加到EntityCollection

时间:2012-02-27 22:58:52

标签: c# .net linq entity-framework

我试图将EntityCollection属性(v.TPM_USER2)设置为数据库中的用户子集。我有数组view.DNs,其中包含要添加的用户名列表。我可以这样做:

if(view.DNs != null && view.DNs.Length > 0)
{
   var users = (from u in context.TPM_USER where view.DNs.Contains(u.DN) select u);
   foreach (var u in users)
   {
      v.TPM_USER2.Add(u);
   }
}

这很好用,但我觉得有一种方法可以通过一行代码完成。我试过了:

v.TPM_USER2 = (from u in context.TPM_USER where view.DNs.Contains(u.DN) select u);

导致错误:

  

错误78无法隐式转换类型   ' System.Linq.IQueryable'至   ' System.Data.Objects.DataClasses.EntityCollection

我也试过使用ToArray()而没有任何运气。有没有办法做到这一点?

更新

我也尝试过:

v.TPM_USER2.Attach(from u in context.TPM_USER where view.DNs.Contains(u.DN) select u);

编译,但会生成运行时错误:

  

当源对象关联时,Attach不是有效操作   此相关端处于添加,删除或分离状态。对象   使用NoTracking合并选项加载的内容始终是分离的。

1 个答案:

答案 0 :(得分:1)

v.TPM_User2.AddRange(users);

修改:那是EntitySet - 看起来你可能会被foreach困住。或者,您可以编写自己的AddRange扩展方法,以便在您专门执行一行时为您执行循环。