我想在我的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())
正在将查询转换为 SQL,并且只能转换它显式支持的函数调用,显然不支持Int32 CompareTo(System.String)
。
支持使用静态方法string.Compare(string, string)
:string.Compare(x.Street, _opsm.Street) <= 0
。