【问题标题】:Distinct items in the nested list嵌套列表中的不同项目
【发布时间】:2014-07-25 01:55:58
【问题描述】:

有这个模型:

public class VMDeliveryList  //[View-model]
{
    public List<ContractDelivery> ContractDeliveryList { get; set; }
}

public class ContractDelivery
{
    public Contract Contract { get; set; }
    public List<Delivery> DeliveryList { get; set; }
}

public class Delivery
{
    public int Id { get; set; }
    public Employee Employee { get; set; }
}

public class Employee
{
    public int Id { get; set; }
}

我需要为不同的 Employee.Id 创建 foreach 循环 谢谢你的建议。

【问题讨论】:

  • 在 LINQ 中使用 Distinct 关键字

标签: c# list distinct-values


【解决方案1】:

您可以使用SelectMany 来展平列表,然后使用Select 获取Id

foreach(int id in viewModel.ContractDeliveryList.SelectMany(a => a.DeliveryList)
                                                .Select(b => b.Employee.Id)
                                                .Distinct() )
{
    ....
}

【讨论】:

    【解决方案2】:

    假设您有 vmDeliveryList 您的视图模型实例。使用 lambda 语法:

    var ids = vmDeliveryList.ContractDeliveryList
                            .SelectMany(cdl => cdl.DeliveryList)
                            .Select(dl => dl.Employee.Id)
                            .Distinct();
    

    可惜查询语法中没有Distinct()方法,所以只能选择所有id,然后apply distinct:

    var allIds = from cdl in vmDeliveryList.ContractDeliveryList
                 from dl in cdl.DeliverList
                 select dl.Employee.Id;
    
    var ids = allIds.Distinct();
    

    【讨论】:

    • 谢谢,我对 SelectMany 不太熟悉。对我来说正确的方法是:Model.ContractDeliveryList.SelectMany(x => x.DeliveryList).Select(x => x.Employee.Id).Distinct()
    猜你喜欢
    • 1970-01-01
    • 2021-02-27
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多