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

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

我想过滤实体的导航属性。让我们有两个 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; }

}

Client 包含名为 Products 的导航集合属性,其中将包含 Product client is using or he has used。

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

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

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

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

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

提前感谢您的解决方案。

最佳答案

假设这是 LINQ 问题,并且 Clients 和 Products 之间存在关系。

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

如果您想要的对象只有 2012 年的客户和产品。

更新时假定名称、ID 和产品上有 setter 。

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/

相关文章:

c# - Entity Framework 货币,小数点后 3 位

C# NHibernate 简单问题

c# - 编辑时更改 Gridview 行背景颜色?

c# - 使用大量 "if"语句优化代码

android - 来自不同表的联合列值

entity-framework - 在 ASP.NET Core 中响应后做一些工作

c# - Unity (Unity5) 中 c# 中的属性 - 你能避免支持变量吗

SQL top 5 记录算法

sql - Ruby on Rails中的单步批处理删除

c# - Entity Framework 核心连接字符串 - 环境变量