使用LINQ向EntityCollection添加多个项

本文关键字:添加 EntityCollection LINQ 使用 | 更新日期: 2023-09-27 18:25:55

我正在尝试将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.IQUERABLE"到'System.Data.Objects.DataClasses.EntityCollection

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

更新:

我也试过:

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

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

当与关联的源对象此相关端处于添加、删除或分离状态。对象使用NoTracking合并选项加载的总是分离的。

使用LINQ向EntityCollection添加多个项

v.TPM_User2.AddRange(users);

编辑:这是针对EntitySet的——看起来你可能会被前臂卡住。或者,如果您只想在一行中进行循环,您可以编写自己的AddRange扩展方法来为您进行循环。