繁体   English   中英

实体框架多对多关系:搜索是否包含所有关系

[英]Entity Framework Many To Many Relations: Search if contains all

我在这个问题上已经有一段时间了,我不知道该怎么做。 我有这个模型:

public class ConversationDB
{
     public int Id { get; set; }
     public virtual List<UserDB> Participants { get; set; }
}

和这个

public class UserDB
{    
        public int Id { get; set; }

        public String Username { get; set; }
        public String FirstName { get; set; }
        public String LastName { get; set; }
        public String Email { get; set; }
        public String Password { get; set; }

        public virtual List<ConversationDB> Conversations { get; set; }
}

我目前正在苦苦挣扎的是搜索包含参与者列表中所有元素的对话:

ConversationDB conversation = db.Conversations.Where(c => c.Participants.OrderBy(p => p.Username).SequenceEqual(partList.OrderBy(p => p.Username))).FirstOrDefault();

这段代码虽然给我一个错误。 我应该采取的正确程序是什么?

编辑:我带来了这个丑陋和愚蠢的解决方案,但基本上是我想要的:

IEnumerable<ConversationDB> convs = db.Conversations.AsEnumerable();
foreach(UserDB u in partList)
{
      convs = convs.Where(c => c.Participants.Contains(u));
}

为什么不 :)

ConversationDB conversation = db.Conversations.Where(c => c.Participants.Count() == db.Users.Count());

我认为,您不能两次添加一个用户。

或者,更正式的方式:

ConversationDB conversation = db.Conversations.Where(c => db.Users.All(u => c.Participants.Contains(u)));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM