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

标签 c# linq linq-to-sql asp.net-mvc-5

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

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_paysno_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/

相关文章:

c# - 如何使用 MongoDB C# Driver Aggregate 获取 2 个字段上具有特定值的最新项目?

sql-server - 从 linq to sql 获取嵌套结果

linq-to-sql - 使用Linq选择N个随机记录

c# - 从 ViewModel 更改 ListBox 的 SelectedItem

c# - 无法转换类型为 'WhereEnumerableIterator` 的对象 1' to type ' System.Collections.Generic.ICollection`1

c# 将 3 个集合列表合并为一个列表

sql - 使用Linq to SQL进行多线程

c# - 使用 LINQ-to-SQL 从事务内部回滚存储过程调用?

c# - 使用 XmlSerializer 序列化整数数组

c# - AmyuniPDF 以错误的字体(特殊字符)打印 PDF 文档