У меня есть классы, такие как:Как фильтровать по полям свойства навигации в Entity Framework?
public class ProductInCategory
{
public Guid Guid { get; set; }
public long ProductID { get; set; }
public long ProductCategoryID { get; set; }
public virtual Product Product { get; set; }
public virtual ProductCategory ProductCategory { get; set; }
}
public class Product
{
public virtual ICollection<ProductInCategory> ProductsInCategories { get; set; }
// and other fields and navigation properties not important for this example
}
А теперь я хочу, чтобы выполнить запрос, который получает все продукты с использованием Entity Framework с жадной загрузкой с конкретным ProductCategoryID'S:
using (var db = new EntityDataModel())
{
var node = db.Tree.FirstOrDefault(x => x.Guid == editedNode);
List<long> descentantIds = db.Tree
.Where(x => x.AncestorID == node.AncestorID)
.Select(x => x.DescendantID).ToList();
List<Product> products = db.Products
.Include("Details")
.Include("Prices")
.Include("Prices.Currency")
.Include("Prices.Seller")
.Include("Translations")
.Include("Translations.Language")
.Include("ProductsInCategories")
.Where(x => ...)) // how to filter by ProductsInCategories.ProductCategoryID (which in my case is descentantIds) ?
.ToList();
}
Я думаю, что я должен ввести Где положение что-то похожее на .Where(x => descentantIds.Contains(x.ProductsInCategories.ProductCategoryID))
, но это не сработает.
Here похожее решение, но я не знаю, как его применять в моем случае.
Благодарим за любые советы!
Что именно вы хотите? что descentantIds содержит ЛЮБОЙ из идентификаторов в ProductsInCategories? все? наоборот? – DevilSuichiro
Я хочу получить эквивалент SQL 'WHERE ProductsInCategories.ProductCategoryID IN (1, 2, 3 .. n)', но я не вижу, как я могу получить значение выражения лямбда ProductCategoryID в моем навигационном свойстве ProductsInCategories. В моем случае, где указано: 'IQueryable' –
ProductionCategories - это ICollection of Products, который ProductCategoryID вам нужен? – DevilSuichiro