无法理解表达式 - RavenDB

时间:2014-07-08 05:04:30

标签: linq ravendb

我有一组交易,每个交易都有一个允许访问交易的用户ID列表。

只需用

查询Raven
var theId = 6;
var deals = session.Query<Deal>().Where(x => x.UserIds.Contains(theId)).ToList();

Deal类看起来像

public class Deal {
    public Int32 Id { get; set; }
    public List<Int32> UserIds = new List<Int32>();
}

异常结果

Could not understand expression: .Where(x => x.UserIds.Contains(value(Deals_Manager.Controllers.DealsController+<>c__DisplayClass4).theId))

内部异常

{"Expression type not supported: value(Deals_Manager.Controllers.DealsController+<>c__DisplayClass4).theId"}

问题是什么?

1 个答案:

答案 0 :(得分:3)

Contains中的Where是一个非常难以转换为UserIds:6的Lucene表达式的表达式树,更不用说当你引入一个闭包来将外部变量带入lambda表达式。 (顺便说一句,关闭是让你的例外看起来如此愚蠢。)

更复杂的是,您的模型是一个List,它有自己的Contains特殊版本,与IEnumerable版本不同。

尝试使用此尺寸代替:

var theId = 6;
var deals = session.Query<Deal>()
    .Where(x => x.UserIds.Any(id => id == theId))
    .ToList();

对于Raven无法理解的任何表达式树,只需尝试用更原始的术语来思考它。