我想过滤实体的导航属性。我们有两个Poco课

public class Client
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Product> Products { get; set; }
}

public class Product
{
    public int Id { get; set; }
    public string ProductName { get; set; }
    public int Year { get; set; }

}


客户端包含称为产品的导航集合属性,该属性将包含客户端正在使用或已使用的产品。

并且产品具有客户开始使用产品的年度财产。

现在我想要一个在2012年开始将这些产品与这些产品一起使用的客户。

目前我正在下面错误的查询

this.ObjectContext.Clients.Include("Products").
Where(d => d.Name =="John" && d.Products.Where(e => e.Year == 2012).Count() > 0).FirstOrDefault();


我知道这是错误的查询。我只想检索具有2012年产品的客户。但是上面的查询将为我提供所有产品记录的客户。

在此先感谢您的解决方案。

最佳答案

假设这是LINQ问题,并且客户与产品之间存在关系。

this.ObjectContext.Clients.Where(d => d.Name =="John" && d.Products.Any(e => e.Year == 2012));


并且如果您想要对象仅包含2012年的客户和产品。

假设存在名称,ID和产品的设置器,则进行更新。

this.ObjectContext.Clients.Where(d => d.Name == "John").Select(d => new Client(){
Name = d.Name,
Id = d.Id,
Products = d.Products.Where(e => e.Year == 2012).ToList()
});

关于c# - 如何根据相关集合中实体的值进行过滤?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23957100/

10-10 03:09