这是我的问题。我有一个特定的列表,int[]
为了简单起见,我将列出它。
int[] a = {1,2,3,4,5};
假设我需要转换此列表中的每个项目,但根据情况,我可能会返回一个 int 或一个 int 数组。
举个例子,假设我需要返回{v}
如果值为奇数,{v,v+1}
如果值为偶数。我已经这样做了:
int[] b = a.SelectMany(v => v % 2 == 0 ? new int[] { v, v+1 } : new int[] { v })
.ToArray();
所以如果我运行这个,我会得到预期的响应:
{1,2,3,3,4,5,5}
看到我有重复的数字,对吧?3
和5
。我不想要那些重复的数字。现在,您可能会告诉我,我可以.Distinct()
在处理完数组后调用。
这就是问题。该子句相当复杂(我只是编了一个更简单的例子),如果它已经存在于列表中SelectMany
,我绝对不想处理。3
我可以检查是否3
存在于原始列表中。但是,如果我加入了3
该SelectMany
条款,我不想再次获得它。例如,如果我有这个列表:
int[] a = {1,2,3,4,5,2};
我会得到这个:
{1,2,3,3,4,5,5,2,3}
因此返回v
(我的原始值)并v+1
在最后再次返回。只是为了让你能更好地理解它v+1
代表了我想避免的一些处理。
总结一下,这就是我想要的:
- 我有一个对象列表。(查看)
- 我需要过滤它们,根据结果,我可能需要返回多个对象。(检查,使用
SelectMany
) - 我需要它们是不同的,但我不能在过程结束时做到这一点。
{v}
如果{v+1}
已经存在,我应该能够返回。(不知所措……)
我想到的一件事是编写一个SelectMany
可能适合我需要的自定义,但我想确保没有内置的方法可以做到这一点。
编辑:我相信我的例子可能误导了你们。我知道如何确定是否v+1
在列表中。需要明确的是,我有一个对象,它有 2 个 int 属性,Id 和 IdParent。我需要“归还”所有对象及其父母。但我只有 ParentId,它来自对象本身。我能够知道是否v+1
在列表中,因为我可以检查那里是否有任何对象具有与我正在检查的 ParentId 相同的 ID。
回答:我最终使用了Aggregate
,它可以用来做我正在寻找的东西。