我想在我的sql查询中比较2个字符串。在此查询中,我希望所有值都大于特定值。所以在SQL中,这看起来像这个where STREET > 'street'
。在linq中,我在where子句中使用了它:x => x.Street.CompareTo(_opsm.Street) <= 0
。但是,当我运行这个时,我收到一个错误说:
&#34; LINQ to Entities无法识别方法&#39; Int32 CompareTo(System.String)&#39;方法,并且此方法无法转换为商店表达式。&#34;
这是否意味着我不能在EF中使用这个比较器?
编辑:我在查询的地方使用specification system。我之前从来没有遇到任何问题,但经过仔细研究,可能与他们有关。
简单规范的一个例子是:
var tempspec = new AdHocSpecification<Eenheid>(
x => string.Compare(x.Street, OverzichtPersonenSearch.Street, StringComparison.Ordinal) >= 0
);
此AdHocSpecification基本上返回Expression&gt;立即(AdHocSpec的代码是here)
奇怪的是,这有效:
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())
答案 0 :(得分:1)
EF正在将您的查询转换为SQL,并且只能翻译它明确支持的函数调用,显然不支持Int32 CompareTo(System.String)
。
支持使用静态方法string.Compare(string, string)
:string.Compare(x.Street, _opsm.Street) <= 0
。