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.budowaa.system_operacyjny等的SQL类型有哪些 我刚刚编辑了代码并为 a.column 等编写了类型。 您是否尝试过在 SQLProfiler 运行时运行它,并检查针对数据库运行的查询,并且返回的结果与您预期的一样?可以通过这种方式追踪一些难以发现的错误。 【参考方案1】:

试试IEnumerable&lt;class_search&gt; qq = db.ExecuteQuery&lt;class_search&gt;(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 DateTypeSql Db Type 不兼容导致的主要问题。 要解决这个问题,您必须创建一个 sql select 命令视图并将其拖到您的 dbml 设计器中。

linq to sql dbml 自动映射引擎正确地选择目标和源类型。并在您的代码中使用您的 dbml.designer.cs 文件中生成的 POCO 类拖动视图并享受它。

【讨论】:

以上是关于LINQ ExecuteQuery - 错误的主要内容,如果未能解决你的问题,请参考以下文章

org.postgresql.util.PSQLException:错误:关系不存在 PreparedStatement.executeQuery ()

无法使用 executeQuery 发出数据操作语句

SQL ExecuteQuery 3061 错误消息

无法使用 executeQuery() 发出数据操作语句

LINQ-to-XML 中 XSD.EXE 的替代方案?

SQL 'Execute As' 登录命令和 Linq to SQL