我正在使用以下代码:
IEnumerable<ObjectiveDetail> toBeAdded =
objectiveDetail1.Where(a => objectiveDetail2.All(
b => b.ObjectiveDetailId != a.ObjectiveDetailId));
然后:
foreach (var _obj in toBeAdded)
{
_uow.ObjectiveDetails.Add(_obj);
}
这有效并将一个(或多个)新对象详细信息添加到集合中。
但是我想知道。有没有另一种方法可以结合 LINQ 和 foreach?
请您参考如下方法:
所以你实际上想要添加不在第二个集合中的所有对象。 Enumerable.Except效率更高(假设 ObjectiveDetailId 是唯一的):
IEnumerable<ObjectiveDetail> toBeAdded = objectiveDetail1.Except(objectiveDetail2);
您需要覆盖Equals + GetHashCode:
public class ObjectiveDetail
{
public int ObjectiveDetailId { get; set; }
// other properties ...
public override bool Equals(object obj)
{
var obj2 = obj as ObjectiveDetail;
if (obj2 == null) return false;
return ObjectiveDetailId == obj2.ObjectiveDetailId;
}
public override int GetHashCode()
{
return ObjectiveDetailId;
}
}
顺便说一句,你不需要foreach,你可以使用AddRange :
_uow.ObjectiveDetails.AddRange(toBeAdded);
