我正在使用委托来构造linq查询的where子句。这是一个例子:
public Func<Order, bool> WhereFunc(string search)
{
return o => o.OrderNumber.Contains(search) || o.Part.Name.Contains(search);
}
然后我就这样调用这个函数:
entities = _orderRepo.Query
.Where(WhereFunc(search))
.OrderBy(OrderByFunc(orderBy))
.Skip(start*pageSize)
.Take(pageSize)
.ToList()
.Select(OrderDisplay.New);
执行WhereFunc时出现以下错误:
{"There is already an open DataReader associated with this Command which must be closed first."}
任何人都可以帮助我理解为什么会发生这种情况以及我可以采取哪些措施来缓解这种情况?我认为这与在委托函数中访问代理实体有关,但我并不确定......
更新
如果我将WhereFunc更改为以下内容:
public Func<Order, bool> WhereFunc(string search)
{
return o => o.OrderNumber.Contains(search);
}
然后不会抛出异常 - 因此我认为它与代理实体有关。
更新
以下是我的实体:
public class Order : EntityBase<int>
{
public string OrderNumber { get; set; }
public virtual Part Part { get; set; }
[ForeignKey("Part")]
public int PartId { get; set; }
}
public class Part : EntityBase<int>
{
public string Name { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}