LINQ ExecuteQuery – 错误

我有Executequery的问题:错误消息:“指定的强制转换无效”。 我试过了:

var qq = db.ExecuteQuery(query, ddl4, ddl5, ddl1).ToList(); 

但同样的错误也是如此。 我在几个方面尝试过。 总是这个错误或“查询结果不能多​​次枚举”,当我尝试做IEnumerable时。 我读了很多文章,但我不知道怎么做。 我做错了什么,或者错过了什么?

 public class class_search { public string path_image { get; set; } public string name_product { get; set; } public float cost { get; set; } } public partial class Search : System.Web.UI.Page { DataClasses1DataContext db = new DataClasses1DataContext(); string ddl4 = DropDownList4.SelectedItem.Value; string ddl5 = DropDownList5.SelectedItem.Value; string ddl1 = DropDownList1.SelectedItem.Value; string query = "select p.path_image, p.name_product, p.cost from Table1 a, Table2 p, Table3 k where a.column1 = {0} and a.column2 = {1} and k.column2 = {2} and p.IDForeignColumn1 = k.IDcolumn and p.IDForeignColumn2 = a.IDcolumn" var qq = db.ExecuteQuery(query, ddl4, ddl5, ddl1); ListView1.DataSource = qq; ListView1.DataBind(); } 

//我将代码改为eng语言 现在a.column1,a.column2和k.column2是字符串类型。

尝试IEnumerable qq = db.ExecuteQuery(query, ddl4, ddl5, ddl1).ToList(); 看看是否有帮助。

我知道这似乎是一个挑剔,但var的行为可能是一个障碍,所以它值得尝试。 如果不这样做,请告诉我,我会尝试适当更新此答案。

此外,请更新问题中的代码示例,以显示您的代码所针对的事件方法,作为评论者之一建议。

SQL中的FLOAT类型不是浮动的.Net CLR,它是double类型。 事实上,LINQ-to-SQL提供程序不会将float类型映射到任何SQL类型。 因此,在尝试比较class_search.cost或尝试创建对象class_search时,发送的参数会失败。

解决方案:将search_class定义更改为:

 public class class_search { public string path_image { get; set; } public string name_product { get; set; } public double cost { get; set; } } 

您的主要问题是由Clr DateTypeSql Db Type之间的不兼容引起的。 要解决此问题,您必须创建一个sql select命令视图并将其拖到dbml设计器中。

linq to sql dbml auto mapper引擎在选择目标和源类型时正确决定。并在你的dbml.designer.cs文件中使用代码生成POCO类的拖动视图并享受它。