我正在使用以下代码:
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);
关于c# - 我可以结合使用 LINQ 和 foreach 来将对象添加到集合中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18169640/