包含int

时间:2015-10-26 19:54:35

标签: c# linq contains

我目前正在WebAPI上为会话系统工作(作为学校项目)。它基本上是两个用户之间的邮箱。

添加新邮件时,我想检查两个用户是否已经互相交谈过。目前所有内容都作为变量存储在内存中(它仅适用于学校,以后可以进行改进)。

我的模型是这样的:

public class Conversation
{
    public int Id { get; set; }
    public int[] Users { get; set; }
    public DateTime Created { get; set; }
    public DateTime Updated { get; set; }
    public List<Message> Messages { get; set; }

    public static List<Conversation> listeConversation = new List<Conversation>
    {
        new Conversation { 
            Id = 1, Users = new int[2] {1, 2}, Messages = new List<Message> {
                new Message { Id = 1, UserId = 1, Content = "Bonjour", Created = DateTime.Now},
                new Message { Id = 2, UserId = 2, Content = "Comment ça va ?", Created = DateTime.Now},
                new Message { Id = 3, UserId = 1, Content = "Très bien et toi ?", Created = DateTime.
        }
    };
}

在我的方法中,我收到了发件人和收件人ID。我想创建一个新的方法,我检查对话列表是否已经包含这两个用户之间的一个对话,但我真的不知道该怎么做。

我想我必须使用Contains,但我真的不知道如何将它与数组一起使用。我试过这样的事情:

private Conversation getConversationFromUsers(int[] users)
{
     Conversation.listeConversation.Where(c => c.Users.Contains(users));
}

但它没有用。

3 个答案:

答案 0 :(得分:2)

如果我理解你的问题你需要这样的东西吗?

Conversation.listeConversation.Where(c => c.Users.Contains(users[0]) && c => c.Users.Contains(users[1]);

更新:对于两场以上的比赛,请使用以下内容:

Conversation.listeConversation.Where(c => c.Users.Intersect(users).Count() > 2)

答案 1 :(得分:1)

尝试使用LINQ Intersect()方法:

var foundConversations = Conversation.listeConversation.Where(c => c.Users.Intersect(users).Count() >= users.Lenght).ToList();

它适用于任何长度的用户数组。

答案 2 :(得分:0)

我会使用HashSet<int>来存储您想要查找其会话的用户。这使您可以访问SetEquals()方法,该方法测试您正在寻找的集合相等性。

private Conversation getConversationFromUsers(int[] users)
{
    var set = new HashSet<int>(users);
    return Conversation.listeConversation.FirstOrDefault(c => users.SetEquals(c.Users));
}