使用lambda表达式使用C#过滤和添加值

时间:2016-04-13 10:42:35

标签: c# arrays foreach lambda

C#的新手并感谢任何帮助。问题是我需要根据数组过滤api调用的结果(使用" allowedA"" allowedB"数组。)我不知道如何编辑用于检查循环的lambda表达式。

 var activities = await _restClientTaxonomy.GetTaxonomyFullAsync(TAXONOMY_CLASSIFICATIONID_FOR_ACTIVITY);
 var activityTypes = await _restClientTaxonomy.GetTaxonomyFullAsync(TAXONOMY_CLASSIFICATIONID_FOR_ACTIVITY_TYPES);

            var documentEventxx = activities.Select(type => type.Id);

            long [] allowedA = new long []{ 7137, 40385637};
            long [] allowedB = new long []{ 7137, 40385637};


            foreach (long value in documentEventxx)
            {

                foreach (var item in allowed)
                {

                    if (item == value) {
                        //These are the values I am looking for -> values that are part of the documentEventxx and allowedB.
                    }
                }
            }

            var result = activityTypes.Select(type => new CategoryViewModel
            {
                Id = type.Id,//This is where I want to add only items that are in the allowedA array
                Text = type.Name,
                Types = activities.Where(a => a.ParentId == type.Id).Select(t => new TaxonomyMemberTextItem
                {
                    Id = t.Id, //This is where I want to add only items that are in the allowedB array
                    Text = t.Name
                }).ToList()
            }).ToArray();

我一直在阅读lambda表达式和foreach循环,所以请不要发布随机链接。

提前致谢。

2 个答案:

答案 0 :(得分:1)

在选择之前过滤值。

            activityTypes.Where(x=>allowedA.Contains(x.Id)).Select(type => new CategoryViewModel
            {
                Id = type.Id,
                Text = type.Name,
                Types = activities.Where(a => a.ParentId == type.Id &&  allowedB.Contains(a.Id)).Select(t => new TaxonomyMemberTextItem
                {
                    Id = t.Id, 
                    Text = t.Name
                }).ToList()
            })

答案 1 :(得分:0)

要过滤您使用.Where。您.Select创建新类型列表。所以为了过滤,然后创建你想要的对象列表:

var result = activityTypes.Where(type=>isAllowed(type.Id)).Select(type => new CategoryViewModel
{
    Id = type.Id,//This is where I want to add only items that are in the allowedA array
    Text = type.Name,
    Types = activities.Where(a => a.ParentId == type.Id&&isAllowed(a.Id)).Select(t => new TaxonomyMemberTextItem
    {
        Id = t.Id, //This is where I want to add only items that are in the allowedB array
        Text = t.Name
    }).ToList()
}).ToArray();