指定的强制转换无效.linq查询c#

时间:2015-06-02 08:50:42

标签: linq casting

我有一个包含这些列

的表名LibraryInfo
[libraryId] [smallint] IDENTITY(1,1) NOT NULL,
[libraryName] [nvarchar](200) NOT NULL,
[mId] [smallint] NOT NULL,
[description] [nvarchar](300) NULL,
[updatedBy] [int] NOT NULL,
[updatedAt] [datetime] NOT NULL

我设计了一个dbml文件来访问该表并创建一个方法,如下所示:

public List<LibraryInfo> GetLibraryInfos()
{

    var context = new BookDataClassesDataContext(){ ObjectTrackingEnabled = false };

    return context.LibraryInfos.ToList();
}

当我调用此方法时'return context.LibraryInfos.ToList();'告诉我'指定的演员表无效'。

有没有人帮助我。

2 个答案:

答案 0 :(得分:0)

在将表/视图导入linq模型后,您可能更改了表或视图中的一种列数据类型。

只需重新导入它,以便自动生成的模型的数据类型与db结构相同。

答案 1 :(得分:-1)

我以前的答案显然不正确。但是:

这里似乎有不匹配的类型。 ToList()表上的context.LibraryInfos会返回LibraryInfos个对象(List<LibraryInfos>)而非List<LibraryInfo>的列表。所以要么你的方法需要声明为

public List<LibraryInfos> GetLibraryInfos()

或返回项目的代码需要更改为

return context.LibraryInfo.ToList();

这实际上取决于你想要归还哪一个。

关于您对问题的评论:

  

context.LibraryInfo.ToList();给出错误,dbml文件不包含LibraryInfo的定义

显然,您的数据上下文中只有一个LibraryInfos表。这意味着您需要将方法返回类型更改为List<LibraryInfos>

public List<LibraryInfos> GetLibraryInfos()

所以该方法现在读取

public List<LibraryInfos> GetLibraryInfos()
{
    var context = new BookDataClassesDataContext(){ ObjectTrackingEnabled = false };
    return context.LibraryInfos.ToList();
}

从表中获得的每个项都具有与表名匹配的类型,因为LibraryInfos表实际上是LibraryItems类型项的集合。

您可能因为编译器抱怨它不存在而创建了LibraryInfo类 - 您需要决定是否可以从项目中删除它(在解决方案资源管理器中查找LibraryInfo.cs文件)。但是你不能在LibraryInfos表和LibraryInfo类的项目之间进行转换。