为了账号安全,请及时绑定邮箱和手机立即绑定

在 Linq MongodbDriver 的“Where”方法中使用“Any”方法的问题

在 Linq MongodbDriver 的“Where”方法中使用“Any”方法的问题

C#
有只小跳蛙 2022-12-24 14:47:43
我刚开始使用 linq,但遇到了一些问题。我有一个大的 A 型集合和一个小的 B 型集合。我想要 A 中的项目列表,它们的“id”确实存在于 B 中。所以这是我认为可行的方法:List<string> list = collection_A                 .Where(c => collection_B.Any(x => x.MessageId == c.Id))                 .Select(c=>c.Id)                 .ToList();我在 .Net 中使用 mongoDB linq 提供程序,错误是:System.ArgumentException:不支持的过滤器。关系是 1-1其实我不知道在这种情况下我是否应该使用“加入”或其他东西。
查看完整描述

2 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

我建议你试试这个:

var messageIds = new HashSet<string>(collection_B.Select(x => x.MessageId).Distinct());

List<string> list =
    collection_A
        .Where(c => messageIds.Contains(c.Id))
        .Select(c => c.Id)
        .ToList();


查看完整回答
反对 回复 2022-12-24
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

如果我正确理解您的问题,以下代码将为您指明正确的方向。我使用 MongoDAL 进行数据访问,这只是 c# 驱动程序的抽象。


using System;

using System.Linq;

using MongoDAL;


namespace Example

{

    class Person : Entity

    {

        public string Name { get; set; }

    }


    class BanRecord : Entity

    {

        public One<Person> Person { get; set; }

        public string ReasonForBan { get; set; }

    }


    class Program

    {

        static void Main(string[] args)

        {

            new DB("testdatabase");


            var person1 = new Person { Name = "Person One" };

            var person2 = new Person { Name = "Person Two" };

            var person3 = new Person { Name = "Person Three" };


            person1.Save();

            person2.Save();

            person3.Save();


            var ban1 = new BanRecord

            {

                Person = person1.ToReference(),

                ReasonForBan = "Cause we can!"

            };

            ban1.Save();


            var ban2 = new BanRecord

            {

                Person = person2.ToReference(),

                ReasonForBan = "Cause we can!"

            };

            ban2.Save();


            var bannedPeople = (from b in DB.Collection<BanRecord>()

                                join p in DB.Collection<Person>() on b.Person.ID equals p.ID into banned

                                from p in banned

                                select p).ToArray();


            Console.ReadKey();

        }

    }

}


查看完整回答
反对 回复 2022-12-24
  • 2 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信