【问题标题】:Cast a String to Int to use it in Linq query将 String 转换为 Int 以在 Linq 查询中使用它
【发布时间】:2015-07-22 18:38:56
【问题描述】:

这是我在 edmx:ConceptualModels 下的函数:

<Function Name="IntConvert" ReturnType="Edm.Int32">
      <Parameter Name="stringvalue" Type="Edm.String" />
      <DefiningExpression>
        CAST(stringvalue AS Edm.Int32)
      </DefiningExpression>
</Function>

这里是要翻译的方法:

public partial class SqlCustomFunctions
{
    [EdmFunction("MyModel", "IntConvert")]
    public static int IntConvert(string stringvalue)
    {
        throw new NotSupportedException("This function can only be used in a LINQ to Entities query");            
    }
}

下面是调用函数的代码:

filterResults = filterResults.OrderBy(x => SqlCustomFunctions.IntConvert(x.Badge)).Skip(start).Take(length);

报错信息如下:

base = {"LINQ to Entities 无法识别方法'Int32 IntConvert(System.String)' 方法,并且此方法不能 翻译成商店表达式。"}

看起来 edmx 没有编译函数或类似的东西。

是什么导致了这个问题,我该如何解决?

【问题讨论】:

  • 我的意见是您需要将其拆分为 2 行。首先,将其转换为int,成功后转为LinQ

标签: c# linq function edmx


【解决方案1】:

你试过..吗?

CAST(stringvalue AS int)

【讨论】:

  • 你的 EF 版本是什么?
  • 我不是百分百肯定,但我认为您需要更新到较新的版本。你有什么限制吗?
  • 我在 package.config 文件中找到了这个标签:
  • 我从 System.Data.Entity dll Reference 获取的另一个版本
  • 打开包管理器控制台并输入Update-Package –reinstall EntityFramework
【解决方案2】:

试试这个:

filterResults = filterResults
    .OrderBy(x => Convert.ToInt32(x.Badge))
    .Skip(start)
    .Take(length);

Tests 是一个表格:

【讨论】:

  • 很奇怪。对我来说很好。
  • 抱歉,刚刚意识到这是使用 LINQ to SQL 而不是 LINQ over EF。
  • 这是偶然去mysql的吗?
  • 是的,我在 Linq 中使用。数据库是 SQL Server
猜你喜欢
  • 2013-07-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多