![](/img/trans.png)
[英]Lookup a lambda expression in a dictionary by a key, and then use it?
[英]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));
请注意,此代码中有一些危险的部分:
jobLinkedBags
和jobs
(以确定计数然后过滤它们),这可能会导致问题,具体取决于它们是什么特定的IEnumerable
实现IEnumerable
作为值的字典。 此枚举也被延迟执行。 因此,当您最终遍历它时,您应该确保此枚举的来源仍然有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.