我试图找出导致问题的原因
LINQ to Entities does not recognize the method 'Int16 Parse(System.String)' method, and this method cannot be translated into a store expression
当执行到达 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()
也无法解决该异常。
最佳答案
将参数 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
...
关于c# - LINQ to Entities 无法识别方法 'Int16 Parse(System.String)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31906525/