【问题标题】:Could not understand expression - RavenDB无法理解表达式 - RavenDB
【发布时间】:2014-08-05 05:21:37
【问题描述】:

我有一组交易,每个交易都有一个允许访问交易的用户 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"}

有什么问题?

【问题讨论】:

    标签: linq ravendb


    【解决方案1】:

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

    由于您的模型是一个列表,它有自己的特殊版本 ContainsIEnumerable 版本不同,这一事实更加复杂。

    试试这个尺寸:

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

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

    【讨论】:

    • 谢谢,忘了这个,但几周前就用这个解决了这个问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多