在LightSwitch中,我有一个PreprocessQuery事件,如下所示:
partial void ValidOrders_PreprocessQuery(ref IQueryable<Order> query)
{
query = query.Where(order => OrderIsValid(order));
}
public bool OrderIsValid(Order order)
{
return true;
}
这失败并显示一条消息(在HTMLClient端!)“方法不能为空”。
但这很好用:
partial void ValidOrders_PreprocessQuery(ref IQueryable<Order> query)
{
query = query.Where(order => true);
}
有人能看出原因吗?
谢谢, 保罗
答案 0 :(得分:2)
查询提供程序仅显示方法OrderIsValid
,并且由于该方法已经编译为IL,因此无法再“查看它”以查看它的实现,因为它需要创建{ {1}}代表它的对象。
你有很多选择,包括你自己内联方法,或让方法本身返回一个表达式,而不是做工作:
Expression
这会让你写:
public Expression<Func<Order, bool>> OrderIsValid()
{
return order => true;
}
作为旁注,我强烈建议您不要通过引用传递查询,而是返回一个新查询;这将是更惯用的方法。