【问题标题】:Convert string to int in LINQ to Entities?在LINQ to Entities中将字符串转换为int?
【发布时间】:2011-11-16 00:12:58
【问题描述】:

我必须将 string 值转换为 int,但似乎 LINQ to Entities 不支持这一点。

对于以下代码,我遇到了错误。

var query = (from p in dc.CustomerBranch
             where p.ID == Convert.ToInt32(id) // here is the error.
             select new Location()
             {
                 Name      = p.BranchName,
                 Address   = p.Address,
                 Postcode  = p.Postcode,
                 City      = p.City,
                 Telephone = p.Telephone
             }).First();
return query;

LINQ to Entities 无法识别方法“Int32 ToInt32 (System.String)”,并且该方法无法转换为存储表达式。

【问题讨论】:

    标签: entity-framework linq-to-entities


    【解决方案1】:

    在 LINQ 之外进行转换:

    var idInt = Convert.ToInt32(id);
    var query = (from p in dc.CustomerBranch
                 where p.ID == idInt 
                 select new Location()
                 {
                     Name      = p.BranchName,
                     Address   = p.Address,
                     Postcode  = p.Postcode,
                     City      = p.City,
                     Telephone = p.Telephone
                 }).First();
    return query;
    

    【讨论】:

    • 是的,那肯定行得通:)。但我想知道在查询中一定有办法做到这一点..
    • 这取决于 LINQ 提供者 哪些在 linq 中可以工作,哪些不能(即 linq 提供者是否能够将表达式转换为底层语言) 它不支持的 EF 提供者这个转换表达式。
    • @kandroid 我认为在查询中这样做不好,尽管你可以这样做 p.ID.ToString() == id
    • 哦,错误是因为 linq 正在尝试将您的语句转换为 SQL,但它不识别 convert 等效于 SQL 强制转换,不确定它是否会将 parse 识别为等效跨度>
    • 谢谢你们。 p.ID.ToString()==id,不起作用,甚至 int.parse(id) 也不起作用。但是,我找到了我的答案。干杯。
    【解决方案2】:

    不,他们不会。可以这样想:ToString()Parse() 都是对象上的方法。由于 LINQ to Entities 尝试将您的 LINQ 表达式转换为 SQL,因此这些表达式不可用。

    如果需要在查询中执行此操作,可以使用Castshould be available in LINQ to Entities。对于ToString,您可以使用SqlFunctions.StringConvert()

    【讨论】:

    • -1。 Cast 将提供的集合的元素转换为指定的类型。如果您向 Cast 提供一个字符串,它将尝试将该字符串转换为请求类型的 IEnumerable。
    猜你喜欢
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    相关资源
    最近更新 更多