为什么这个Linq不起作用(将Linq表达式转换为URI时出错:只能指定查询选项(orderby,where,take,skip)

时间:2012-07-20 10:23:37

标签: c# linq odata

var query = from ch in Client.wcf.context.CashHeading
    where ch.Id_customer == customern//cc.Id
    from cs in Client.wcf.context.Cash
    where cs.Id_cashheading == ch.Id
    from gg in Client.wcf.context.Good
    where gg.Id == cs.Id_good
    select gg.Price.Value;

我正在处理它的内部错误:

  

将Linq表达式转换为URI时出错:只能指定查询   最后一次导航后的选项(orderby,where,take,skip)。

我无法理解为什么,完整的来源Here, on GitHub

1 个答案:

答案 0 :(得分:3)

基本上,您必须在执行所有导航(from)之后将where子句压缩为 where子句,如下所示:

var query = 
    from ch in Client.wcf.context.CashHeading
    from cs in Client.wcf.context.Cash
    from gg in Client.wcf.context.Good
    where 
        ch.Id_customer == customern && //cc.Id
        cs.Id_cashheading == ch.Id &&
        gg.Id == cs.Id_good
    select gg.Price.Value;

当然,这似乎似乎是最优的,因为看起来它会交叉连接所有表并且然后执行过滤,但请记住,你可能正在处理IQueryable<T> interface实现,这意味着很可能会解释这个,然后通过处理翻译的查询来优化。