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。 Table1 ) at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader
2.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 语句中的 XmlAttributeCollection 上使用 Linq?