У меня есть, может быть, немного неловко - вопрос, на который я не могу понять ответ. У меня есть следующие объекты:Как фильтровать несколькими связанными объектами в Entity Framework
public class Post
{
public Guid Id { get; set; }
public string Text { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
public class Tag
{
public Guid Id { get; set; }
public string Name { get; set; }
}
Я установил связь быть много-ко-многим с помощью текучего API:
modelBuilder.Entity<Post>()
.HasMany(p => p.Tags)
.WithMany()
.Map(m =>
{
m.MapLeftKey("PostId");
m.MapRightKey("TagId");
m.ToTable("PostTags");
});
Я хочу, чтобы фильтровать сообщения в списке тегов (только возврата сообщений, которые имеют все теги указанные):
context.Posts.Where(p => p.Tags.Any(t => tags.Contains(t)))
Где tags
список заданных пользователем тегов и мой Tag
объект имеет свой Equals
метод переопределен на основе имущества Id
. Но когда я запускаю запрос я получаю NotSupportedException
:
Исключение типа «System.NotSupportedException» произошло в EntityFramework.SqlServer.dll, но не был обработан в пользовательском коде
Дополнительная информация: Не удалось создать постоянное значение типа «Plog.Domain.Plog.Tag». В этом контексте поддерживаются только примитивные типы или типы перечислений.
Как я могу сделать эту работу таким образом, который также достаточно эффективен?
Я принимаю теги - это список 'Tag'? если да, это проблема – Balah