У меня есть такие классы, как:
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:
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 что-то похожее на .Where(x => descentantIds.Contains(x.ProductsInCategories.ProductCategoryID))
, но это не сработает.
Вот похожее решение, но я не знаю, как применить его в моем случае.
Спасибо за любой совет!
WHERE ProductsInCategories.ProductCategoryID IN (1, 2, 3 .. n)
, но не понимаю, как получить значение лямбда-выражения ProductCategoryID в моем навигационном свойстве ProductsInCategories. В моем случае оператор Where равенIQueryable<Product>
- person Rafal Cypcer   schedule 30.01.2016