【问题标题】:Ravendb query using a list as criteria使用列表作为条件的 Ravendb 查询
【发布时间】:2018-06-05 19:15:34
【问题描述】:

请有人帮忙解决这个问题。我试图从索引中返回一个列表,其中 id 与给定列表中的任何 id 匹配。我试过了:

var members =  session.Query<MembersNameIdIndex.Result, MembersNameIdIndex>()
                      .Where(x => list.Any(y => y == x.Id))
                      .AsProjection<MembersNameIdIndex.Result>()
                      .ToList();

var members =  from m in session.Query<MembersNameIdIndex.Result, MembersNameIdIndex>()
                where list.Any(y => y == m.Id)
                select m;              
var projection = members.AsProjection<MembersNameIdIndex.Result>()
                          .ToList();

var members =  from m in session.Query<MembersNameIdIndex.Result, MembersNameIdIndex>()
            where list.Contains(m.Id)
            select m;
var projection = members.AsProjection<MembersNameIdIndex.Result>()
                      .ToList();

错误总是一样的:Expression type not supported: System.Linq.Expressions.TypedParameterExpression (对于最后 2 个,它在投影部分失败。)

【问题讨论】:

    标签: ravendb


    【解决方案1】:

    这应该可行:

    var members =  from m in session.Query<MembersNameIdIndex.Result, MembersNameIdIndex>()
                where m.Id.In(list)
                select m;
    var projection = members.AsProjection<MembersNameIdIndex.Result>()
                          .ToList();
    

    【讨论】:

    • Ayende,如果我错了,请纠正我,但我认为 linq 中没有任何 .In 运算符。无论如何,m.Id 不会公开 .In 选项。我看过的所有堆栈问题都说要使用 .Contains 来模拟 sql 'in' 命令。
    • .In() 方法来自 Raven.Client.Documents.Linq 命名空间
    • 啊,我明白了!非常感谢艾扬德。是否有任何资源列表显示客户端 api 中的所有方法?我在 raven 网站上查看,找不到任何东西。
    猜你喜欢
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多