转换时,我获得LINQ to Entities Int32 ToInt32(System.String)

时间:2012-05-24 13:41:01

标签: entity-framework linq-to-sql

当convert.i尝试int.Parse(),SqlFunction和EdmFunction时,我得到LINQ to Entities Int32 ToInt32(System.String),但问题仍然存在。

例外:

System.NotSupportedException: LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method, and this method cannot be translated into a store expression

代码:

try
    {
        ModelEntities me = new ModelEntities();
        var query = from p in me.Products
                    join c in me.ProductCategories
                    on Convert.ToInt32(p.CategoryId) equals c.CategoryId
                    select new
                    {
                        p.ProductTitle,
                        c.CategoryName
                    };
        rptProducts.DataSource = query;
        rptProducts.DataBind();
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }

2 个答案:

答案 0 :(得分:9)

您不能在linq查询中使用Convert.ToInt32。 Linq有自己的语法,无法识别外部方法。

您必须将要查找的变量提取到C#,转换它,并将其用作另一个查询中的变量。或者,如果您有权访问数据库,则可以同时创建categoryIDs。有意义的是类似的字段应该是相同的类型。

希望有所帮助!

答案 1 :(得分:4)

我建议将c.CategoryId转换为像这样的字符串

 var query = from p in me.Products
             from c in me.ProductCategories
             let categoryId = me.ProductCategories.Take(1).Select(x => c.CategoryId).Cast<string>().FirstOrDefault()
             where p.CategoryId == categoryId 
             select new
             {
               p.ProductTitle,
               c.CategoryName
             };