如何解决如何使用Linq过滤列表内部列表?
我有一个视图模型
public class TechnicianZipInformation
{
public int id {get; set;}
public virtual Technician Technician { get; set; }
}
在此视图中建模技术员的数据类型为技术员类
public class Technician
{
public int Id {get; set}
public virtual ICollection<WorkOrder> WorkOrders { get; set; } // Inside work order there is another member id of int.
}
比方说,第一步是TechnicalZipInformation的列表。 现在,我需要过滤TechnicianZipInformation列表中Technician内部ID == 52的工作单列表。我该怎么做?
我尝试通过以下方式
var testResult = stepOne.Select(x => x).Where( z=> z.Technician.WorkOrders.Select(x => x.Id != 52)).ToList();
这对我怎么做没有帮助?
解决方法
您可以使用SelectMany Linq函数在所有WorkOrders
中创建TechnicalZipInformations
的单个列表。
List<WorkOrder> result = stepOne.SelectMany(t => t.Technician.WorkOrders.Where(x => x.Id != 52)).ToList();
,
要使用WorkOrders
删除Id = 52
,可以使用ToList()
,继续进行ForEach
并用WorkOrders
重新分配Where
,如下所示。
stepOne.ToList()
.ForEach(z => z.Technician.WorkOrders = z.Technician.WorkOrders.Where(x => x.Id != 52).ToList());
- 要使用
ForEach
,请用ICollection
将List
转换为ToList()
。 - 使用
WorkOrders
过滤z.Technician.WorkOrders.Where(x => x.Id != 52).ToList()
- 使用上述过滤器将
z.Technician.WorkOrders
重新分配为.ForEach(z => z.Technician.WorkOrders = z.Technician.WorkOrders.Where(x => x.Id != 52).ToList())
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。