我试图找出导致问题的原因
LINQ to Entities无法识别方法' Int16 Parse(System.String)'方法,并且此方法无法转换为商店表达式
执行到达if
条件时会发生错误。第if (query.Any())
行引发异常,我无法理解原因。你能发现问题吗?
我的查询:
var query = from clt in vclt.cltpar
join p in vclt.profession //left join
on clt.no_prof equals p.no_prof
into temp
from prof in temp.DefaultIfEmpty()
where
clt.no_pays == short.Parse(no_pays) &&
clt.tp_pid == tp_pid &&
clt.no_pid == no_pid &&
clt.no_seq == short.Parse(no_seq)
select new
{
clt.no_pays,
clt.tp_pid,
clt.no_pid,
clt.no_seq,
dt_cre = clt.dat_nais,
DesigClt = vclt.get_nompren(clt.no_pays, clt.tp_pid, clt.no_pid, clt.no_seq).ToString(),
AdrClt = prtf.adresseclt(clt.no_pays, clt.tp_pid, clt.no_pid, clt.no_seq).ToString(),
CodRisque = vclt.get_coderisque(clt.no_pays, clt.tp_pid, clt.no_pid, clt.no_seq).ToString(),
FormeJur = "",
Secteur = prof.lib_prof,
Registre = "",
MatFisc = "",
NumTeleph = prtf.get_numtel(clt.no_pays, clt.tp_pid, clt.no_pid, clt.no_seq).ToString(),
DateDebRel = ogcc.get_datdebrel(clt.no_pays, clt.tp_pid, clt.no_pid, clt.no_seq).ToString(),
RNE = "",
cd_dou = "0"
};
if (query.Any())
{
stuff here
}
更新 我告诉我在查询之外进行了转换,如下所示
short n_pays = short.Parse(no_pays.ToString());
short n_seq = short.Parse(no_seq.ToString());
但是这会抛出一个异常,即使我使用ToString()
答案 0 :(得分:2)
将参数no_pays
和no_seq
的解析移到查询之外。 EF和LINQ2SQL无法将所有函数/表达式转换为SQL代码,因此查询失败。它在query.Any()
失败,因为在此行,查询将转换为SQL并发送到SQL服务器。
var nopays = short.Parse(no_pays);
var noseq = short.Parse(no_seq);
var query = from clt in vclt.cltpar
join p in vclt.profession //left join
on clt.no_prof equals p.no_prof
into temp
from prof in temp.DefaultIfEmpty()
where
clt.no_pays == nopays &&
clt.tp_pid == tp_pid &&
clt.no_pid == no_pid &&
clt.no_seq == noseq
...
答案 1 :(得分:1)
此行为是设计使然。您正在尝试将.NET库函数嵌入到EF查询中。因为它不能翻译成SQL,所以不支持。
您必须重写查询,而不使用.Parse()。
这个特殊情况可能不会太难。将字符串转换为LINQ查询的外