LINQ to Entities 无法识别方法 'Int16 Parse(System.String)'

LINQ to Entities does not recognize the method 'Int16 Parse(System.String)'

我试图找出导致问题的原因

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());

BUT 这引发了一个异常,即使我使用 ToString()

也无法解决

将参数 no_paysno_seq 的解析移到查询之外。 EF 和 LINQ2SQL 无法将所有 functions/expression 代码转换为 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
                          ...

此行为是设计使然。您正在尝试将 .NET 库函数嵌入到您的 EF 查询中。由于无法翻译成 SQL,因此不受支持。

您必须重写您的查询,而不使用 .Parse()。

这种特殊情况可能并不太难。将字符串转换为 short outside LINQ query