linq查询只读

时间:2013-01-21 19:55:20

标签: vb.net linq readonly

我对这个问题感到十分困惑。我一直在寻找一段时间,仍然没有解决问题的答案。

我运行一个查询,我尝试在其中设置值。问题是如果我没有指定read only,它们会变成Select New With个变量。当我指定Select New With时,它不会更新数据库。下面列出了一些代码。

我的目标是让射手更新会更新数据库的DataGridView。我在StackOverflow的另一个问题中告诉我,DataGridView不会仅仅通过用户输入数据来更新数据库。所以我创建了一个更新按钮,它运行下面列出的代码。

代码:

使用Select New With查询允许我编辑变量,但不会提交数据库:

Dim query = From t In db.Trophies _
            Select New With {t.TrophyName, t.WinnerId, t.Name, t.Score, t.Printed}

查询不会让我编辑变量。错误消息显示“Property'TrophyName'是'ReadOnly':

Dim query = From t In db.Trophies _
            Select t.TrophyName, t.WinnerId, t.Name, t.Score, t.Printed

我想要更新结果的代码:

Dim i as integer = 0
For Each result In query
    result.WinnerId = dgvTrophies.Rows(i).Cells(dgvTrophies.Columns("WinnerId").Index).Value
    result.Name = dgvTrophies.Rows(i).Cells(dgvTrophies.Columns("Name").Index).Value
    result.Score = dgvTrophies.Rows(i).Cells(dgvTrophies.Columns("Score").Index).Value
    db.SubmitChanges()
    i += 1
Next

表:

PRIMARY KEY TrophyId int auto-increments
TrophyName varchar(50)
WinnerId char(7) Allow Nulls
Name varchar(20) Allow Nulls
Score int Allow Nulls
Printed bit

非常感谢任何建议或答案。

编辑:我已尝试将ObjectTrackingEnabled设为True,但未解决此问题。

编辑:要让用户进行更“自动”的更新,用户离开edit mode DataGridView我就会调用db.SubmitChanges来更新数据库,不再需要更新按钮。

1 个答案:

答案 0 :(得分:2)

使用Select new with { ...创建一个匿名对象,对其的更改不会提交给数据库。您需要使用linq实体。例如:

Dim query = From t In db.Trophies _
            Select t

或者只是

Dim query = db.Trophies

这将有效。