我正在尝试获取未删除状态的客户列表和他们的订单。
我有一个客户实体
public class Customer
{
public int Id {get;set;}
public string Name {get;set;}
public Collection<Order> Orders {get;set;}
}
我有一个像
这样的订单实体public class Order
{
public int Id{get;set;}
public string Name {get;set;}
public decimal Cost {get;set;}
public int CustomerId {get;set;}
public Customer Customer {get;set;}
public bool IsDeleted {get;set;}
}
我在努力获取未删除的客户及其订单列表。
我为实现上述要求所做的是,
var customers = (from customer in Customers
join order in Orders.Where(x=>!x.IsDeleted)
on customer.Id equals order.CustomerId
where !order.IsDeleted).ToList()
当我运行此查询时,我收到了包含所有订单(包括已删除= 1)的客户列表。
请帮我忽略已删除的订单。
提前致谢。
答案 0 :(得分:1)
如果您要过滤Orders
的{{1}}以仅包含未删除的订单,则需要执行此操作。
然后应该创建从查询结果填充的新(分离的)Customer
实例,或者可以创建匿名对象或特定的&#34; DTO&#34;实例:
Customer
请注意,由于没有public class CustomerView
{
public readonly int Id;
public readonly string Name;
public readonly List<Orders> Orders;
}
var customers =
from customer in Customers
select new CustomerView() {
Id = customer.Id,
Name = customer.Name,
Orders = customer.Orders.Where(x=>!x.IsDeleted).ToList()
};
子句来限制您正在处理的返回客户数,因此有一个无限结果集作为此查询的输出。
如果您按ID加载特定客户,则可以使用以下方法来延迟加载&#34;延迟加载&#34;它的订单使用过滤器。注意:您需要将where
替换为您自己的MyDbContext
类型。
DbContext
答案 1 :(得分:0)
据我所知,C#需要一个select
子句。如果您在建议的查询select new {customer, order}
中添加一个,则会看到您的问题。您通过customer.Orders
提取与客户相关的所有订单,而不仅仅是查询结果。