【问题标题】:How to create a class to use with LINQ?如何创建一个与 LINQ 一起使用的类?
【发布时间】:2016-02-17 19:09:34
【问题描述】:

我正在尝试创建一个带有变量的简单类,我可以将数据分配给该类,然后使用 LINQ 更新数据库。

我的班级是这样的:

Public Class GoalDetails
Inherits System.Object

Public Id As Integer
Public GoalTime As Integer
Public Scorer As String
Public HomeAway As String
End Class

我分配变量然后插入的代码是:

Dim goalsToDb = New GoalDetails()
goalsToDb.Id = 1
goalsToDb.GoalTime = 87
goalsToDb.Scorer = "W Rooney"
goalsToDb.HomeAway = "Home"

db.Goals.InsertOnSubmit(goalsToDb)

db.SubmitChanges()

我收到消息“'GoalDetails' 类型的值无法转换为 'Goal'。

我将相同的代码与第三方 DLL 中的另一个类一起使用,并且它可以工作,但是我当然看不到该类的代码以了解它与我的不同之处。

【问题讨论】:

  • 您正在尝试将 GoalDetailsobject 插入到 Goals 表中。更改您填充的对象类型或插入到正确的表中。 (GoalDetails?) 如果您希望它接受具有相同属性值的 任何 类型,那么您就错了。

标签: asp.net vb.net linq


【解决方案1】:

这是一种静态类型语言。即使两种类型在概念上相似,它们仍然是完全不同的类型。您不能互换使用它们。

这个属性:

db.Goals

是给定类型的集合。 (可能命名为Goal?)您只能将该类型的项目添加到该集合中。像这样的:

Dim goalsToDb = New Goal() ' or whatever the type is called, you'd have to confirm
goalsToDb.Id = 1
goalsToDb.GoalTime = 87
goalsToDb.Scorer = "W Rooney"
goalsToDb.HomeAway = "Home"

db.Goals.InsertOnSubmit(goalsToDb)

db.SubmitChanges()

您可以创建自定义类以在应用程序中保存数据。但是当使用您的数据访问框架生成的代码(实体框架?LINQ to SQL?)时,您必须使用该框架生成的类型。因此,如果您在整个应用程序中使用自定义类,那么您需要在与数据库交互时将其值转换为数据库类。

【讨论】:

  • 我现在看到了,我不需要创建自己的类,当我将表导入到我的 LINQ to SQL 类中时,我需要使用它自动创建的类。现在可以使用了,谢谢。
【解决方案2】:

您似乎混淆了 Goal 和 GoalDetails 这两种类型。您不能使用 db.Goals.InsertOnSubmit() 在 GoalDetails 表中插入数据。为此,您需要提出类似 db.GoalDetails.InsertOnSubmit() 之类的东西,它将获取 GoalDetails 的对象并插入到 GoalDetails 表中。

另外,如果您想查看来自 3rd 方 DLL 的类,您可以使用 IL 反汇编程序,例如 ILSpy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多