【问题标题】:linqjs intersect comparer issuelinqjs相交比较器问题
【发布时间】:2016-03-16 15:58:41
【问题描述】:

我正在使用 linqjs,我有一个包含要包含在列表中的 id 的数组,以及一个包含属性 userId 的复杂对象的数组。

问题是当我做一个交叉路口时,它似乎永远不会返回任何东西,但是 compareSelector 周围的信息很少。

所以这是我正在做的一个例子:

enumerableOfUsers.intersect(listOfIdsToInclude, "$.userId");

所以在上面的例子中,enumerableOfUsers 将是从用户数组(包含 userId 字段)创建的现有可枚举,listOfIdsToInclude 是 id 值数组,如 ["12345", "213213", "2124"] 等。

相交似乎有效,但从不返回任何内容,而且我知道 userIds 匹配,所以我在这里做错了吗?

【问题讨论】:

    标签: javascript linq.js


    【解决方案1】:

    问题是比较选择器适用于第一组和第二组的项目。第二组已经是一个 id 列表,因此比较选择器不适用。投影产生undefined 值,这将始终导致找不到结果。

    您只需要将选择器应用于第一组值。试试这个:

    // using linqjs 2.x syntax
    var query = enumerableOfUsers.Select("$.userId").Intersect(listOfIdsToInclude);
    

    【讨论】:

    • 啊,好吧,这有点道理,但这确实意味着在相交后我会丢失用户对象的其余部分,是否有任何其他方法可以将整个用户对象保持在查询范围内所以我可以把它们从另一端退回去吗?我基本上像where( x=> x.userId is in listOfIdsToInclude) 一样使用它......也许我可以用 indexOf 或其他东西而不是相交来做一个 where 。无论如何,您都会得到答案,因为这提供了所需的信息。
    • 在这种情况下,我会使用连接。另一方面,where value in collection 的等价物可以通过使用collection.Contains(value) 来实现。但是,您将无法在 lambda 字符串中表达它。
    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多