我必须执行这个表达式:
var CAP = modelCap.AZCPC00F.Where(x => x.CPCVER == CPCVER && x.CPCNAR == CPCNAR && x.CPCCAP == CPCCAP)
.Where(x => XXXXKG == 0 ? true : Convert.ToInt64(Convert.ToDouble(x.CPCLKG)) < XXXXKG)
.Where(x => XXXXMC == 0 ? true : Convert.ToInt64(Convert.ToDouble(x.CPCLMC)) < XXXXMC)
.Where(x => XXXXFD == "N" ? true : x.CPCZFD == XXXXFD).FirstOrDefault();
当我尝试执行此操作时,我对x.CPCLKG的内部转换有例外。例外是:
LINQ to Entities无法识别方法'int64'方法,并且此方法无法转换为商店表达式。
我知道问题出在转换中,但我该如何使用此功能?
x.CPCLKG的示例是9.9999,是nChar字符类型。
感谢所有
答案 0 :(得分:1)
您需要具有在内存查询中完成的Linq To Entities中不支持的逻辑。我们可以通过在支持的查询部分上调用ToList()来完成此操作。这将执行这些部分,并将结果作为列表返回。然后我们可以在内存中执行Linq支持的任何内容。
var CAP = modelCap.AZCPC00F.Where(x => x.CPCVER == CPCVER && x.CPCNAR == CPCNAR && x.CPCCAP == CPCCAP)
.Where(x => XXXXFD == "N" ? true : x.CPCZFD == XXXXFD)
.ToList();
var CAP2 = CAP.Where(x => XXXXKG == 0 ? true : Convert.ToInt64(Convert.ToDouble(x.CPCLKG)) < XXXXKG)
.Where(x => XXXXMC == 0 ? true : Convert.ToInt64(Convert.ToDouble(x.CPCLMC)) < XXXXMC).FirstOrDefault()