如何根据相关集合中的实体值进行过滤?

时间:2014-05-30 14:33:47

标签: c# sql entity-framework entity-framework-4 entity-relationship

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

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; }

}

客户端包含名为Products的导航集合属性,该属性将包含Product客户端正在使用或已使用过的。

并且产品具有客户已开始使用产品的年份属性。

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

目前我正在进行以下错误查询

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

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

先谢谢你的解决方案。

1 个答案:

答案 0 :(得分:1)

假设这是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()
});