Linq表达不受支持

Sac*_*nth 2 c# linq linq-to-entities entity-framework-4

我有以下LINQ to Entities表达式:

var allItemsOver64 =
  _inventoryContext.Items.Where(
  i => DateTimeHelper.CalculateAgeInYears(i.PrimaryInsured.DoB, now) >= 65);
Run Code Online (Sandbox Code Playgroud)

问题是,当我使用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();
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

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

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

  • 那将起作用...但是,如果该集合包含数百万条记录,该怎么办?那将需要首先将所有记录检索到客户端。然后,将为内存中的每个项目调用该函数。它确实可能会降低性能。 (2认同)