【问题标题】:LINQ ExecuteQuery - ErrorLINQ ExecuteQuery - 错误
【发布时间】: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 运行时运行它,并检查针对数据库运行的查询,并且返回的结果与您预期的一样?可以通过这种方式追踪一些难以发现的错误。

标签: c# asp.net linq


【解决方案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 类拖动视图并享受它。

      【讨论】:

        猜你喜欢
        • 2010-12-18
        • 2019-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多