我有一个类,其中包含一个填充私有字段的函数,就像这样...
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>
答案 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调用。