如何循环IList对象并将状态设置为SQL修改

时间:2017-11-09 08:15:09

标签: sql asp.net asp.net-core-mvc

我试图循环一个对象列表并在发布到SQL之前将它们设置为已修改。但我得到一个错误对象引用没有设置为对象的实例。

使用

设置单个对象实例
    [BindProperty]
          public Models.Ord Order { get; set; }
Order = await _context.Ord.SingleOrDefaultAsync(m => m.Id == id);
        _context.Attach(Order).State = EntityState.Modified;

但这会返回错误。

[BindProperty]
        public IList<OrdLn> OrderLineList { get; private set; }

        OrderLineList = await _context.OrdLn.Where(o => o.OrdId == id).ToListAsync();

        foreach (OrdLn p in OrderLineList)
        {
            _context.Attach(p).State = EntityState.Modified;
        }
        await _context.SaveChangesAsync();

enter image description here

1 个答案:

答案 0 :(得分:0)

&#39; Q&#39;在LINQ中代表&#34;查询&#34;。 LINQ不是为了更新对象。

您可以使用LINQ查找要更新的对象,然后更新它&#34;传统上&#34;。

当您使用SingleOrDefault函数时,远程或数据库中的对象,直到您更改实体类型(更改为新类),因此您可以对实体和db操作进行更改,以便进行。

使用List功能时。对象是在应用程序的内存中,因此db之间存在关系,并且无法执行db操作操作。

所有这些返回类型都有继承自IEnumerable的接口,您应该确保理解。该接口基本上允许您在foreach语句中使用该类(在C#中)。

  • IList :是ICollection的所有内容,但它也支持添加和删除项目,按索引检索项目等。它是&#34;最常用的界面。对象列表&#34;,我知道这是模糊的。
  • IQueryable :是一个支持LINQ的可枚举接口。您始终可以从IList创建IQueryable并使用LINQ to Objects,但您也可以在LINQ to SQL和LINQ to Entities中找到用于延迟执行SQL语句的IQueryable。
相关问题