estoy tratando de consultar Posts
basado en una lista de Tags
:LINQ varios a varios intersección
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;}
}
Ahora quiero devolver mensajes basados en una lista de etiquetas: IList<Tag> searchTags = ParseTagsFromSearchString("tag1,tag2,tag3"); // this function checks the tags in the database, so all the primary keys are available in the list
Cuando una publicación contiene una o más etiquetas que también existe en searchTags
, debe incluirse en el resultado. He intentado el siguiente:
var q = from s in Context.Registrations
where s.Tags.Intersect(tagList)
select s;
error: Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<Models.Tag>' to 'bool'
var q = from s in Context.Registrations
where s.Tags.Any(t => tagList.Any(t2 => t.Id.Value == t2.Id.Value))
select s;
Tiempo de ejecución de error: NotSupportedException: Unable to create a constant value of type 'Models.Tag'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.
¿Alguna idea?
- update Jan. 4: Las respuestas apuntan a la solución correcta, pero en mi código todavía tengo la excepción NotSupportedException. ¿Es posible que el entero nullable cause esto ya que no es un tipo primitivo?
He tratado de la segunda solución en el código LINQPad del puesto de Mark Lindel y funciona.Desafortunadamente, en mi código recibí la misma UnsupportedException. – Marthijn