LINQ to 实体无法识别方法'Int32 CompareTo(System.String)'方法



我想在我的sql查询中比较2个字符串。在此查询中,我希望所有值都大于特定值。所以在SQL中,这看起来像这样where STREET > 'street'。在 linq 中,我在 where 子句中使用了这个:x => x.Street.CompareTo(_opsm.Street) <= 0 。但是,当我运行它时,我收到一个错误,说:

"LINQ to Entities 无法识别方法'Int32 CompareTo(System.String('方法,并且此方法无法转换为存储表达式。

这是否意味着我不能在 EF 中使用此比较器?

编辑:我们在我的地方查询中使用规范系统。我以前从未遇到过这样的问题,但仔细检查后,它可能与他们有关。

简单规范的一个例子是:

    var tempspec = new AdHocSpecification<Eenheid>(
                        x => string.Compare(x.Street, OverzichtPersonenSearch.Street, StringComparison.Ordinal) >= 0
                    );

这个 AdHocSpecification 基本上会立即返回表达式>(AdHocSpec 的代码在这里(

奇怪的是,这有效:

Een = (from ver in q1
        .Where(
            x =>
                x.PersoonsID == persoon.ComputerNr)
    join een in PagedView.Context.EENHEID
    on ver.Eenheid equals een.ComputerNr into h
        from een in h.DefaultIfEmpty()
        select een
).FirstOrDefault(x => string.Compare(x.Street, "02", StringComparison.Ordinal) >= 0)

但这不会:

Een = (from ver in q1
        .Where(
            x =>
                x.PersoonsID == persoon.ComputerNr)
    join een in PagedView.Context.EENHEID
    on ver.Eenheid equals een.ComputerNr into h
        from een in h.DefaultIfEmpty()
        select een
).FirstOrDefault(tempspec.IsSatisfied())
EF

正在将查询转换为 SQL,并且只能转换它显式支持的函数调用,显然不支持Int32 CompareTo(System.String)

支持使用静态方法string.Compare(string, string)string.Compare(x.Street, _opsm.Street) <= 0

最新更新