c# - 不支持 Linq 表达式

标签 c# linq entity-framework-4 linq-to-entities

我有以下 LINQ to Entities 表达式:

var allItemsOver64 =
  _inventoryContext.Items.Where(
  i => DateTimeHelper.CalculateAgeInYears(i.PrimaryInsured.DoB, now) >= 65);

问题是,当我使用 allItemsOver64 时,它说不支持此表达式。我感觉这个错误是由于调用了 CalculateAgeInYears 方法而发生的。为什么会发生这种情况,我该如何解决?

谢谢,

萨钦

编辑:

即使将代码更改为使用 IEnumerables,我仍然遇到相同的错误。现在这是我的代码:

DateTime now = DateTime.UtcNow;
            var allItemsOver64 =
                _inventoryContext.Items.Where(
                    i => DateTimeHelper.CalculateAgeInYears(i.PrimaryInsured.DoB, now) >= 65).AsEnumerable();
            IEnumerable<Item> items65To69 = allItemsOver64.Where(
                i =>
                DateTimeHelper.CalculateAgeInYears(i.PrimaryInsured.DoB, now) >= 65 &&
                DateTimeHelper.CalculateAgeInYears(i.PrimaryInsured.DoB, now) <= 69).AsEnumerable();

最佳答案

您不能在 EF 查询中调用 C# 方法,因为 EF 不知道如何将方法转换为 SQL。

相反,首先调用 .AsEnumerable() 以强制 Where() 在本地运行。

关于c# - 不支持 Linq 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10335560/

相关文章:

c# - EntityKey 属性只能在属性的当前值为 null 时设置

c# - 更改表单上下文以确保正确命名嵌套模型?

c# - 如何在 Visual Studio 代码中调试 C# 代码

c# - Linq FindAll 和 Where 返回不同的结果

c# - Cassandra:参数类型不匹配

entity-framework - EF:延迟加载,渴望加载和“枚举可枚举”

c# - ObjectContext 可能处于不一致状态

c# - 多进程的奇怪行为

javascript - 通过调用函数自动更新站点

c# - Linq FirstOrDefault 每次迭代都会评估谓词?