LINQ to Entities无法识别该方法,并且此方法无法转换为存储表达式

时间:2014-05-30 19:49:08

标签: c# asp.net-mvc linq entity-framework linq-to-entities

我有一个类,其中包含一个填充私有字段的函数,就像这样...

public class ActionPlan
{
    [Key, Column(Order=0)] 
    public long EnterpriseID  { get; set; }

    [Key, Column(Order=1)]
    public Guid  ActionPlanID { get; set; }

    private ActionPlanCategory _category;
    public ActionPlanCategory GetCategory()
    {
        // Get data and initialize _category
    }
}

在视图中,我试图迭代一个由IEnumerable<ActionPlan>组成的模型。但是一旦foreach循环开始,我就会收到GetCategory()函数的上述错误。函数没有映射到LINQ to Entities中,所以我真的不明白问题是什么。我的观点看起来像......

@model IEnumerable<ActionPlan>

@foreach (var actionPlan in Model)
{
    <tr>
        <td class="sortable_data"><a href="#" class="jumpToMyActionPlans protected" data-plan_key="@actionPlan.Key">@actionPlan.Name</a></td>
        <td class="sortable_data">@(actionPlan.GetCategory() == null ? "NA" : actionPlan.GetCategory().ActionPlanCategoryDescription)</td>
        <td class="sortable_data" style="vertical-align: middle;"><b>@(actionPlan.GetStatus() == null ? "NA" : actionPlan.GetStatus().ActionPlanStatusDescription)</b></td>
        <td>@actionPlan.DescriptionEventCondition</td>
        <td>@actionPlan.ExpectedImpactOutcome</td>
        <td class="sortable_data">@actionPlan.LeadBy</td>
        <td class="sortable_data">@actionPlan.FormattedDeadlineString</td>
    </tr>
}

请注意,在执行实际到达此行之前,一旦输入foreach的条件,就会抛出错误:

<td class="sortable_data">@(actionPlan.GetCategory() == null ? "NA" : actionPlan.GetCategory().ActionPlanCategoryDescription)</td>

1 个答案:

答案 0 :(得分:4)

基于错误,我假设LINQ to Entities用于提取数据,并且GetCategory()在发送到数据库之前以某种方式在查询中使用。如果是这样的话,那将是你的问题。

为避免这种情况,您需要将其从查询中拉出来,并在进行SQL调用后使用该方法。

错误示例:

var qry = SomeContext.SomeTable.OrderBy(x => x.GetCategory().SomeMember);

修正:

var qry = SomeContext.SomeTable.ToList().OrderBy(x => x.GetCategory().SomeMember);

该修复程序强制在通过自定义方法排序之前进行SQL调用。