Пересечение «многие ко многим» LINQ

Я пытаюсь запросить сообщений на основе списка тегов :

public class Post
{
  public int? Id {get;set;}
  public string Name {get;set;}
  public virtual ICollection<Tag> Tags {get;set;}
}
public class Tag
{
  public int? Id {get;set;}
  public string Name {get;set;}
  public vritual ICollection<Post> Posts {get;set;}
}

Теперь я хочу вернуть сообщения на основе списка тегов: IList searchTags = ParseTagsFromSearchString ("tag1, tag2, tag3"); // эта функция проверяет теги в базе данных, поэтому все первичные ключи доступны в списке

Если сообщение содержит один или несколько тегов, которые также существуют в searchTags , его следует включить в результат . Я пробовал следующее:

var q = from s in Context.Registrations
                    where s.Tags.Intersect(tagList)
                    select s;

Ошибка: Невозможно неявно преобразовать тип System.Collections.Generic.IEnumerable в bool

var q = from s in Context.Registrations
                    where s.Tags.Any(t => tagList.Any(t2 => t.Id.Value == t2.Id.Value))
                    select s;

Ошибка выполнения: NotSupportedException: невозможно создать постоянное значение типа Models.Tag. В этом контексте поддерживаются только примитивные типы (такие как Int32, String и Guid). Есть идеи?

- обновление 4 января: Ответы указывают на правильное решение, но в моем коде все еще есть NotSupportedException. Возможно ли, что целое число, допускающее значение NULL, вызывает это, поскольку это не примитивный тип?

6
задан Marthijn 4 January 2012 в 09:48
поделиться