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

标签 c# linq

我正在使用以下代码:

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/

相关文章:

c# - IIS 我的网站文件夹已删除

c# - 如何编写具体类实现相同接口(interface)/服务的服务定位器模式?

c# - 创建 Visual Studio 扩展时如何在源代码管理历史窗口中获取所选项目?

c# - 在构造函数中使用 Mapper.Initialize

C# 加入列表。 LINQ。无法创建常量类型

c# - EF 中的动态搜索表达式问题

c# - 在数据网格中显示对象列表

c# - 带有 Prev/Next 的 IEnumerable

c# - 使用 C# 和 linq 查询 mongo 中的嵌套属性

linq - ASP.NET MVC 4 想要从数据库填充下拉列表