为什么这样的LINQ不起作用(错误翻译LINQ表达式到URI:只能指定查询选项(排序依据,在那里,拿

2019-09-28 17:21发布

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:最后一个导航之后只能指定查询选项(排序依据,在那里,拿,跳过)。

我不明白为什么,满源在这里,在GitHub上

Answer 1:

基本上,你必须会凝结在where子句到那里后, 所有的导航的(第一个 from )已执行,就像这样:

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>接口实现,这意味着,这将更可能以任何处理已转换的查询进行解释,然后进行了优化。



文章来源: Why this Linq doesn't work (Error translating Linq expression to URI: Can only specify query options (orderby, where, take, skip)
标签: c# linq odata