【问题标题】:update values in IQueryable doesn't save to databaseIQueryable 中的更新值不会保存到数据库
【发布时间】:2011-10-20 14:00:37
【问题描述】:

我正在尝试更新我使用 IQueryable 搜索我的 linq to classes 数据上下文的值,我尝试的原因是:

var records=  dinner.GetRecords(id).WHERE(d=>d.Year == Yearpassed).AsEnumerable()//returns IQUERYABLE<t>
foreach( var record in records)
{
   record.Year='2000'
}
dinner.Save(); //this just does a db.SubmitChanges()

然后我再次查询数据并将其绑定到gridview,记录数据是一样的

var records=  dinner.GetRecords(id);
gridview1.DataSource =records;
gridview1.DataBind();

public IQueryable<dinners> GetRecords(string id)
{
     return from dinner in db.dinners
        where dinner.id =id
        select dinner
}

【问题讨论】:

    标签: c# linq gridview iqueryable


    【解决方案1】:

    问题在于您没有修改原始集合。调用 AsEnumarable 正在创建一个新集合,因此您正在更改原始数据上下文无法看到的属性列表。

    这样试试吧……

    foreach( var record in dinner.GetRecords(id).Where(d=>d.Year == Yearpassed))
    {
       record.Year='2000';
    }
    dinner.Save();
    

    基本上,我只是删除了 AsEnumarble() 部分

    如果这不起作用,那么我怀疑我们应该需要查看 GetRecords() 方法中的代码

    【讨论】:

    • @Jake 你为什么要调用 AsEnumerable()?
    • 那不行。我将发布 getRecord 的功能,但它只是对传递的 id 的 linq 查询
    • @Jake: 等等,单曲 = 有没有关系?我的代码中已更改为 ==
    • 不抱歉,这是我的代码中的错字。我的实际代码中有 ==,但会在帖子中进行更改
    • @Jake,那么您的 GetRecords 是否只返回一条记录?并且该记录是否被 where 子句删除?在你的 foreach 循环中添加一个断点,看看有什么改变。另外,请参阅我的编辑
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 2023-04-09
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多