LINQ ExecuteQuery - 错误
Posted
技术标签:
【中文标题】LINQ ExecuteQuery - 错误【英文标题】:LINQ ExecuteQuery - Error 【发布时间】:2012-01-10 01:11:54 【问题描述】:我对 Executequery 有疑问: 错误消息:“指定的转换无效”。我试过了:
var qq = db.ExecuteQuery<class_search>(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<class_search>(query, ddl4, ddl5, ddl1);
ListView1.DataSource = qq;
ListView1.DataBind();
//我把代码改成了eng语言。现在 a.column1、a.column2 和 k.column2 都是字符串类型。
【问题讨论】:
你定义的quote
应该是query
吗?
引用和查询一样吗?如果不是,query
是什么?也许不在 ExecuteQuery 中强制转换任何内容并从存储在 qq 中的字段创建 klasa_wyszukiwania 对象会更容易?请尽量避免使用波兰语,说英语的读者可能很难阅读;)
a.budowa
、a.system_operacyjny
等的SQL类型有哪些
我刚刚编辑了代码并为 a.column 等编写了类型。
您是否尝试过在 SQLProfiler 运行时运行它,并检查针对数据库运行的查询,并且返回的结果与您预期的一样?可以通过这种方式追踪一些难以发现的错误。
【参考方案1】:
试试IEnumerable<class_search> qq = db.ExecuteQuery<class_search>(query, ddl4, ddl5, ddl1).ToList();
看看是否有帮助。
我知道这看起来很挑剔,但 var 的行为在这里可能是一个障碍,所以值得一试。如果还不行,请告诉我,我会尝试适当地更新这个答案。
另外,请更新问题中的代码示例,以显示您的代码所采用的事件方法,正如其中一位评论者所建议的那样。
【讨论】:
【参考方案2】:SQL 中的 FLOAT 类型在 .Net CLR 中不是 float,它是 double 类型。事实上,浮点类型并没有被 LINQ-to-SQL 提供程序映射到任何 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;
【讨论】:
【参考方案3】:Clr DateType 和 Sql Db Type 不兼容导致的主要问题。 要解决这个问题,您必须创建一个 sql select 命令视图并将其拖到您的 dbml 设计器中。
linq to sql dbml 自动映射引擎正确地选择目标和源类型。并在您的代码中使用您的 dbml.designer.cs 文件中生成的 POCO 类拖动视图并享受它。
【讨论】:
以上是关于LINQ ExecuteQuery - 错误的主要内容,如果未能解决你的问题,请参考以下文章
org.postgresql.util.PSQLException:错误:关系不存在 PreparedStatement.executeQuery ()