C#中的LINQ问题

Posted

技术标签:

【中文标题】C#中的LINQ问题【英文标题】:Problem with LINQ in C# 【发布时间】:2011-03-02 14:29:29 【问题描述】:

我在 C# 中使用 LINQ 时遇到问题,我不断收到“指定的强制转换无效”。这就是我想要做的。

我创建了一个类,我在其中声明了表的所有列。

[表(名称=“tbl_Aff”)] 公共类会员 [柱子] 公共字符串名称; [柱子] 公共字符串名字; [柱子] 公共字符串姓氏; [柱子] 公共字符串标题;

然后我声明一个强类型 DataContext,在其中我将所有 Table 集合声明为上下文的成员。

公共部分类数据库:DataContext public Table 附属; public Database() : base(Settings.getConnectionString()) //此方法通过从 XML 文件中读取来获取连接字符串。 公共部分类默认值:System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) 数据库数据库 = 新数据库(); 尝试 var q = from a in database.affiliate 选择一个; foreach (var aff in q) // 这里我得到错误“Specified cast is not valid” lblMessage.Innerhtml += aff.name + ""; 捕捉(例外前) System.Console.WriteLine(ex.Message);

【问题讨论】:

Table<T> 是一个泛型类 - 但您的代码似乎声明了一个 Table 类型的变量。 affiliate 的确切类型是什么?此外,就它试图从/向什么进行转换而言,转换异常说明了什么? 我刚刚编辑了我的代码忘记格式化代码,sry。 Table 的类型是 Affiliate Table。至于转换异常所说的内容,它只说“指定的转换无效”,没有别的。也许我应该在不同的异常中捕获错误? 请发布异常堆栈跟踪 在 System.Data.SqlClient.SqlBuffer.get_Int32() 在 System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i) 在 Read_Affiliate(ObjectMaterializer1 ) at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader2.MoveNext() 在 new_signup.Default .Page_Load(Object sender, EventArgs e) 在 C:\Users\m.buhagiar\Desktop\Signup_Solution\signupLogic\new_signup\Default.aspx.cs:line 28 【参考方案1】:

GetInt32() 表明tbl_Aff 的至少一列实际上不是字符串([n]varchar(...)/[n]text),而您没有给出任何提示。这里最简单的技巧是简单地将该属性设为int(因为这显然是它想要的)。

我还想知道Affiliate 是否还有更多您没有显示的内容;接口、基类、单独的部分类等(因为这些列看起来应该是字符串)。

这个问题困扰我的主要时间是当我(例如)在数据库中有一个 tinyint 并且忘记相应地键入一个枚举(在这种情况下为: byte)。

【讨论】:

谢谢您。我手动检查了 Affiliate 类中的所有列是否与数据库中声明的数据类型匹配,并发现我将某些列声明为 int 而不是 Int16。再次感谢。

以上是关于C#中的LINQ问题的主要内容,如果未能解决你的问题,请参考以下文章

C# 中的 LINQ to SQL 查询

LINQ 选择中的 C# 子查询

使用 LINQ 和实体框架检查 c# var 中的空值

C# 如何在另一个 Linq 语句中的 XmlAttributeCollection 上使用 Linq?

如何在 XxmlElement 而不是 C# 中的 XElement 上运行 linq

Java 等效于 C# Linq 中的 Where 子句