【问题标题】:Add non existing item to list将不存在的项目添加到列表
【发布时间】:2021-02-22 11:41:26
【问题描述】:

我正在尝试用尚未随机添加到列表中的对象填充列表。因此,我在列表中循环 rInt 次,并希望随机选择对象并将它们添加到列表中(如果它们尚不存在):

collectionList = new List<CollectionSccmCM>();

                        Random r = new Random();
                        int rInt = r.Next(0, 5);
                        for(int i=0; i<=rInt; i++){
                            collectionList.Add(_context.CollectionApplications.OrderBy(x => Guid.NewGuid()).Where(x => collectionList.Any(y => y.CollectionID !=(x.collection_id.ToString()))).Select(x => new CollectionSccmCM(){CollectionID= x.collection_id.ToString(), Name=x.collection_name}).FirstOrDefault());
                    }

我似乎在 orderby 和 where 部分有错误,但我无法弄清楚错误。当我在之间放置一个 toList 时,我不再收到任何语法错误,但也不起作用。

任何提示我做错了什么?

谢谢

编辑:

我犯了一个错误,不得不使用包含,但仍然无法正常工作:

collectionList.Add(_context.CollectionApplications.OrderBy(x => Guid.NewGuid()).Where(x => collectionList.Any(y => !y.CollectionID.Contains(x.collection_id.ToString()))).Select(x => new CollectionSccmCM(){CollectionID= x.collection_id.ToString(), Name=x.collection_name}).FirstOrDefault());

编辑: 得到它与一个选择一起工作,但对它不太满意,不明白为什么另一个人没有工作。

collectionList.Add(_context.CollectionApplications.OrderBy(x => Guid.NewGuid()).Where(x => !collectionList.Select(y => y.CollectionID).ToList().Contains(x.collection_id.ToString())).Select(x => new CollectionSccmCM(){CollectionID= x.collection_id.ToString(), Name=x.collection_name}).FirstOrDefault());

【问题讨论】:

    标签: linq lambda


    【解决方案1】:

    我强烈建议您考虑在 LINQ 中添加一些空格。我会将您的第一个示例分解如下:

    collectionList.Add(
        _context.CollectionApplications
            .OrderBy(x => Guid.NewGuid())
            .Where(x => collectionList.Any(y => y.CollectionID !=(x.collection_id.ToString())))
            .Select(x => new CollectionSccmCM() {
                CollectionID = x.collection_id.ToString(), 
                Name = x.collection_name
            }).FirstOrDefault()
    );
    

    查看您的Where 调用,您将包括可能添加的元素,即任何集合 ID 不匹配的元素 (collectionList.Any(y =&gt; ... ))。这就是全部(除非您在collectionList 中只有一个元素)。

    您可能希望使用 All 而不是 Any -- 其中 所有 集合 ID 不匹配:

            .Where(x => collectionList.All(y => y.CollectionID != x.collection_id.ToString()))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 2020-06-23
      • 2019-11-29
      • 2017-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多