Выбор на основе строки в списке C # LINQ - PullRequest
0 голосов
/ 09 марта 2019

Итак, у меня есть класс с именем event, который содержит список ListofInvites. Он имеет адреса электронной почты другого пользователя (другой класс, имеющий свойство emailid), теперь я хочу выбрать все события в зависимости от того, содержит ли строка listofinvites эту конкретную строку. электронная почта

Я пробовал это, но я получаю ошибку

var userEmailID = this.User.Identity.GetUserName();


var events = this.dataBase.Events
       .OrderBy(e => e.DateAndTime)
       .Where(e => e.listOfInvites.Contains(userEmailID))
       .Select(EventViewModel.ViewModel);

Да, извини, я спешил прошлой ночью, когда я написал это

Итак, у меня есть этот класс событий

public class Event
{
    public Event()
    {
        this.IsPublic = true;
        this.DateAndTime = DateTime.Now;
    }
    [Key]
    public int EventID { get; set; }

    [Required]
    [MaxLength(200)]
    public string Title { get; set; }

    [Required]
    public DateTime DateAndTime { get; set; }

    public string AuthorId { get; set; }
    public int Duration { get; set; }
    public string Description { get; set; }
    public string OtherDetails { get; set; }
    [MaxLength(200)]
    public string Location { get; set; }
    public bool IsPublic { get; set; }
    public IEnumerable<string> listOfInvites { get; set; }

    public string  InviteList { get; set; }
}
}

ошибка, которую я получаю, это

System.NotSupportedException: 'The specified type member 'listOfInvites' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.'

Ответы [ 3 ]

0 голосов
/ 09 марта 2019

Это помогло бы увидеть ваши классы, но я предполагаю, что у вас есть список класса с именем Event в вашей базе данных, каждый из которых имеет свойство List<Invite>, а затем EmailId string свойство на каждый из этих Invite экземпляров. Если это так, то, поскольку ваш EmailId не является свойством самого Event, вам придется перебирать List<Invite> каждого события, чтобы связать с ним EmailId. Я предполагаю следующие отношения: Множество событий в вашей базе данных; много приглашает на каждого Event; и один EmailID на каждый Invite.

Следуя этим предположениям, я бы сделал это:

var events = this.database.Events.Where(e => e.ListOfInvites.Any(i => i.EmailId.Contains(userEmailId))).ToList();

Итак, по каждому из событий (предположительно) List<Event> в вашей базе данных мы будем искать каждое приглашение в его свойстве ListOfInvites (это часть e => e.ListOfInvites), ища любое приглашение, где оно EmailId соответствует тому, который мы прошли, то есть: i => i.EmailId.Contains(userEmailId). Этот var станет List<Event>, представляющим все события, на которые приглашен наш пользователь.

0 голосов
/ 10 марта 2019

В сущности Event вы объявляете свойство IEnumerable<string> (listOfInvites), в то время как список типов примитивов не поддерживается в Entity Framework, и так как это свойство не сопоставлено со столбцом базы данных, его нельзя использовать ввыражение where.
Вам необходимо создать другую сущность (следовательно, таблицу) для ListOfInvites с внешним ключом к сущности Event.

0 голосов
/ 09 марта 2019

Надеюсь, что приведенный ниже код решит вашу проблему.

var events = dataBase.Events.Where (p => p.listOfInvites.Contains (userEmailID)). ToList ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...