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)
您不能在EF查询中调用C#方法,因为EF不知道如何将该方法转换为SQL.
相反,.AsEnumerable()先调用以强制在Where()本地运行.