Вернуть обратно все сообщения, содержащие c пользователей в LINQ - PullRequest
0 голосов
/ 27 мая 2020

Итак, у меня есть класс сообщений, и я пытаюсь создать GetMethod, который возвращает все сообщения, которыми обмениваются 2 пользователя с помощью метода linq.

мой класс:

public class Message
{
    [Key]
    public int MessageId { get; set; }

    public string MessageContent { get; set; }

    public string Sender { get; set; }

    public string Receiver { get; set; }

    public DateTime DateCreated { get; set; }
}

Итак, в моем методе я пытаюсь получить все сообщения между пользователями 1 и пользователями 2

это то, что у меня есть до сих пор

    [Route("GetConversation")]
    [HttpGet]
    public ActionResult GetConverstion([FromQuery] string user1, string user2 )
    {
        var conversation =  _dbContext.Messages.Where(x => x.Receiver == user1 && x.Sender == user2).SingleOrDefault();

        return Ok(new { conversation });


    }

, но, конечно, это возвращает только 1 сообщение, только от пользователя user2 к user1.

Может кто-нибудь посоветовать, как я могу использовать LINQ для возврата всех сообщений между отправителями и получателями?

вот снимок моего макета БД для лучшей визуализации:

MyDb

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Этого должно быть достаточно

var conversations =  _dbContext.Messages.Where(x => 
                          (x.Receiver == user1 || x.Receiver == user2) && 
                          (x.Sender == user2 || x.Sender == user1))

Обратите внимание, что это вернет сообщения, отправленные от user1 к user1 и от user2 к user2, но эта проверка становится необходимой, только если ваш logi c не препятствует этому .

Еще один момент, который следует учитывать, - это тот факт, что запрос может возвращать более одной записи, поэтому вызов SingleOrDefault () был удален.

1 голос
/ 27 мая 2020

У вас уже есть ответ, вам просто нужно добавить еще один набор условий для случаев, когда получателем является пользователь 2, а отправитель - пользователь 1. Другая причина в том, что вы вызываете .SingleOrDefault (), который обязательно либо вернет одна строка или ноль. Вместо этого попробуйте вернуть список ...

var conversation =  _dbContext.Messages.Where(x => (x.Receiver == user1 && x.Sender == user2) || (x.Receiver == user2 && x.Sender == user1)).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...