【发布时间】:2020-09-11 17:25:33
【问题描述】:
我有一个订单对象,其部分类包含更改历史记录:
public class SomeOrder
{
public string SomeOrderNumber { get; set; }
public string Status { get; set; }
public IEnumerable<SomeOrderChangesHistory> ChangesHistory { get; set; }
}
public partial class SomeOrderChangesHistory
{
public string PropertyName { get; set; }
public string OldValue { get; set; }
public string NewValue { get; set; }
public DateTime DateTimeUtc { get; set; }
public string UserName { get; set; }
}
我将获得SomeOrder 的列表,如果订单由api user 更新,我想过滤掉它们。由api user 更新的订单将在SomeOrderChangesHistory 类中具有UserName 属性的api user 值。
所以本质上它是基于SomeOrderChangesHistory 对象的UserName 属性过滤List<SomeOrder> 的情况,该对象的列表,即IEnumerable<SomeOrderChangesHistory> 在SomeOrder 对象内。
我该如何做到这一点?
谢谢!
【问题讨论】:
-
“过滤掉”是什么意思?你在使用 EF/EF Core 吗?
-
@NetMage EF 并没有为此发挥作用。我刚刚收到一个 JSON 响应,然后将其解析为 C# 对象,我需要删除由
api user更新的订单,因为我只需要由人更新的订单。下面发布的答案解决了我的问题,但我不知道为什么它被否决了。 -
(不是我。)可能是因为应该使用 LINQ 来创建具有所需标准的新集合,并且在名为
Filter的方法中修改原始列表似乎是个坏主意,尤其是因为它返回一个List,它与传入的相同(对流利的编程很有用,如果你期望 LINQ 行为则不好)。最好命名为Remove... 还有很多不必要的空值检查 (?.)。 -
使用 LINQ,您可以期望执行类似
var peopleOrders = orders.Where(o => !o.ChangeHistory.Any(ch => ch.UserName == "api user")).ToList()的操作。 -
@NetMage 谢谢,你的回答看起来很简洁。