#c# #asp.net-mvc #linq-to-entities
#c# #asp.net-mvc #linq-to-entities (ссылки на объекты)
Вопрос:
Итак, у меня есть класс с именем 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.'
Комментарии:
1. Пожалуйста, укажите класс Invite, EventViewModel. Код ViewModel, а также сообщение об ошибке.
2. Я отредактировал это сейчас
Ответ №1:
В Event
сущности вы объявляете IEnumerable<string>
свойство ( listOfInvites
), в то время как список примитивных типов не поддерживается в Entity Framework, и поскольку это свойство не сопоставлено со столбцом базы данных, вы не можете использовать его в выражении where.
Вам нужно создать другой объект (следовательно, таблицу) для ListOfInvites
с внешним ключом к Event
объекту.
Ответ №2:
Надеюсь, приведенный ниже код решит вашу проблему.
события var = База данных.Мероприятия.Где(p => p.listOfInvites.Содержит(userEmailID)).ToList();
Ответ №3:
Это помогло бы увидеть ваши классы, но я предполагаю, что у вас есть список некоторых названных классов 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>
представлением всех событий, на которые приглашен наш пользователь.
Комментарии:
1. Я отредактировал свой вопрос, можете ли вы взглянуть на него сейчас?