Linq To Entities内部转换

时间:2016-04-06 22:13:06

标签: c# entity-framework linq

我必须执行这个表达式:

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字符类型。

感谢所有

1 个答案:

答案 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()