Light Switch中的预处理查询事件失败

时间:2013-12-06 11:03:34

标签: c# linq visual-studio-lightswitch

在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);
}

有人能看出原因吗?

谢谢, 保罗

1 个答案:

答案 0 :(得分:2)

查询提供程序仅显示方法OrderIsValid,并且由于该方法已经编译为IL,因此无法再“查看它”以查看它的实现,因为它需要创建{ {1}}代表它的对象。

你有很多选择,包括你自己内联方法,或让方法本身返回一个表达式,而不是做工作:

Expression

这会让你写:

public Expression<Func<Order, bool>> OrderIsValid()
{
    return order => true;
}

作为旁注,我强烈建议您不要通过引用传递查询,而是返回一个新查询;这将是更惯用的方法。