У меня есть проблема в Entity-Framework с использованием Code-First, которую я не смог решить.
Наличие в моей базе данных объектов типа
public class Product {
public int ID {get; set; }
public virtual ICollection<Category> Categories { get; set; }
}
public class Category {
public int ID {get; set;}
public virtual ICollection<Product> Products { get; set; }
// rest omitted
}
, я пытаюсьполучить все продукты, имеющие хотя бы одну категорию, из списка указанных категорий.Мне нужно выражение, так как это выражение позже объединяется с другими выражениями.
Т.е.я попытался:
var searchFor = new List<Category>{...};
var expression = product => product.Categories.Any(cat => searchFor.Contains(cat))
Выполнение этого позже для DbContext
context.Products.Where(expression).ToList();
создает исключение, в основном утверждая, что This context supports primitive types only
.
Изменение его на
var expression = product => product.Categories.Any(
cat => searchFor.Any(d => d.ID == cat.ID));
избавиться от сравнения объектов не помогло.Я застрял.Как я могу справиться с этим?