如何在Entity Framework中按导航属性中的字段进行过滤? [英] How to filter by fields from navigation properties in Entity Framework?
本文介绍了如何在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的急切加载:
And now I want to execute query which gets all products using Entity Framework with eager loading with specific 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子句中键入类似于.Where(x => descentantIds.Contains(x.ProductsInCategories.ProductCategoryID))
的内容,但这是行不通的.
I think that I should to type in Where clause something similar to .Where(x => descentantIds.Contains(x.ProductsInCategories.ProductCategoryID))
, but this won't work.
此处是类似的解决方案,但是我不知道如何在我的情况下应用它.
Here is similar solution, but I don't know how to apply it in my case.
谢谢您的任何建议!
推荐答案
尝试一下
.SelectMany(x => x.ProductsInCategories.Where(c => descentantIds.Contains(c.ProductCategoryID))).Select(c => c.Product).Distinct()
这篇关于如何在Entity Framework中按导航属性中的字段进行过滤?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文