繁体   English   中英

创建字典并在值表达式声明中使用键

[英]Create Dictionary and use key in value expression declaration

我有两个列表,想创建一个键值对类型的字典 Key = 每个唯一引用的字符串(字符串类型) Value = list2 的子列表,其中 list2 uniquereference 等于 Key(值的类型为 List)

我想这样做本质上像这样

var dictionary = listA.ToDictionary(x => x.StringProperty, y => List2.Where(x => x.Reference == x.StringProperty)

如何在表达式声明中执行此操作? 因为我目前有一种方法来创建这本词典?

我必须创建这个方法来生成我想要的。 是否有一个表达式可以做同样的事情:

   private Dictionary<string, IEnumerable<JobEntity>> Dictionary(IEnumerable<JobLinkedBag> jobLinkedBags, IEnumerable<JobEntity> jobs)
    {
        if (jobLinkedBags == null || jobs == null || jobLinkedBags.Count() == 0 || jobs.Count() == 0)
            return null;

        var dictionary = new Dictionary<string, IEnumerable<JobEntity>>();

        for (int i = 0; i < jobLinkedBags.Count(); i++)
        {
            var thisBag = jobLinkedBags.ElementAt(i).LuggageCode;
            var jobsForThisBag = jobs.Where(x => x.LuggageCode == thisBag);
            dictionary.Add(thisBag, jobsForThisBag);
        }
        return dictionary;
    }

您的方法到表达式的 1:1 转换如下所示:

Expression<Func<IEnumerable<JobLinkedBag>, IEnumerable<JobEntity>, Dictionary<string, IEnumerable<JobEntity>>>> expression =
        (jobLinkedBags, jobs) => (jobLinkedBags == null || jobs == null || jobLinkedBags.Count() == 0 || jobs.Count() == 0)
                ? null
                : jobLinkedBags.ToDictionary(
                             jlb => jlb.LuggageCode,
                             jlb => jobs.Where(job => job.LuggageCode == jlb.LuggageCode));

请注意,此代码中有一些危险的部分:

  • 此代码多次枚举参数jobLinkedBagsjobs (以确定计数然后过滤它们),这可能会导致问题,具体取决于它们是什么特定的IEnumerable实现
  • 您构建了一个以IEnumerable作为值的字典。 此枚举也被延迟执行。 因此,当您最终遍历它时,您应该确保此枚举的来源仍然有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM