我有两个列表,想要创建一个键值对类型的字典 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;
}
答案 0 :(得分:1)
将方法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
实现< / LI>
IEnumerable
为值的字典。这个枚举也是执行的。因此,当您最终将遍历它时,应确保此枚举的源仍然有效。