使用 C# 使用 lambda 表达式过滤和添加值
Posted
技术标签:
【中文标题】使用 C# 使用 lambda 表达式过滤和添加值【英文标题】:Filter and add values using C# using lambda expression 【发布时间】:2016-08-04 09:43:03 【问题描述】: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 循环的内容,所以请不要随便发布一个链接。
提前致谢。
【问题讨论】:
您是否尝试过活动。Where(a => a.ParentId == type.Id && allowedB.Contains(a.Id))?您可能需要将 .Contains() 更改为 IndexOf(a.id) != -1,试试吧。 【参考方案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()
)
【讨论】:
【参考方案2】:过滤你使用.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();
【讨论】:
顺便说一句,在您选择 TaxonomyMemberTextItem 的地方,您使用一个名为t
的 lambda 变量,但它应该代表源类型,就像在它之前的 Where 中一样,以便更具可读性,因此请尝试使用 @ 987654325@.以上是关于使用 C# 使用 lambda 表达式过滤和添加值的主要内容,如果未能解决你的问题,请参考以下文章