我想以成本>获得客户及其订单; 100,这意味着我想访问client.Orders
并仅获取cost > 100
的内容。
var list1 = list.SelectMany(c => c.Orders.Where(x => x.Cost > 100), (c,x)=> c).Distinct();
public class Client
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public bool ClubMember { get; set; }
public List<Order> Orders { get; set; }
}
public class Order
{
public int ItemCount { get; set; }
public int Cost { get; set; }
}
这将返回所有具有成本&gt;的订单的客户。 100,我希望过滤掉订单并跳过所有与我的条件不匹配的订单。我在其他方面尝试过,但没有成功:(对方法的解释也很棒。
答案 0 :(得分:3)
我认为您不想修改客户对象的内容,这是我的建议:
var list2 = list.Select(c => new // 1
{
client = c,
orders = c.Orders.Where(x => x.Cost > 100)
})
.Where(a => a.orders.Any()) //2
.ToList();
1-选择一个新实体,其中包含(对于每个初始客户端)对客户端的引用以及其订单的筛选列表
2-仅保留至少有一个订单(已过滤)的对象
答案 1 :(得分:0)
也许是这样:
var clientsWithOnlyOneCost100 = clients.Select(c => new
{
client = c,
orders = c.Orders.Where(o => o.Cost > 100)
})
.Where(x => x.orders.Count() == 1);