Skip to main content
 首页 » 编程设计

c#之我可以结合使用 LINQ 和 foreach 来将对象添加到集合中吗

2024年01月28日2998°冷暖

我正在使用以下代码:

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);