C# 使用c在linq中展平列表
我使用linq创建了一个IO_方程列表。IO_方程由单个输出_点和输入_点列表组成。输入点和输出点具有公共的x、y和z坐标,但它们包含其他不公共的字段。我只想将IO_方程列表展平为匿名类型或特定点类型x、y和z,这样我就可以看到列表中每个IO_方程的输出和所有输入 我能够使用linq列出所有的输出点,使用下面的代码。列表41是IO_方程的列表C# 使用c在linq中展平列表,c#,linq,list,C#,Linq,List,我使用linq创建了一个IO_方程列表。IO_方程由单个输出_点和输入_点列表组成。输入点和输出点具有公共的x、y和z坐标,但它们包含其他不公共的字段。我只想将IO_方程列表展平为匿名类型或特定点类型x、y和z,这样我就可以看到列表中每个IO_方程的输出和所有输入 我能够使用linq列出所有的输出点,使用下面的代码。列表41是IO_方程的列表 var flat = (from d2 in list41 select (new BINARY_IO()
var flat = (from d2 in list41
select (new BINARY_IO()
{
propX = d2.propOutputPoint.propX,
propY = d2.propOutputPoint.propY,
propZ = d2.propOutputPoint.propZ,
propDir = POINT_DIRECTION_Types.Output,
})).ToList();
我能够使用linq列出所有的输入点,使用下面的代码。
列表41是IO_方程的列表。propIOPointList是我的输入点列表
var flat = (from d2 in list41
from d3 in d2.propIOPointList
select (new BINARY_IO()
{
propX = d3.propX,
propY = d3.propY,
propZ = d3.propZ,
propDir = POINT_DIRECTION_Types.Input,
})).ToList();
我可以通过将数据格式化为一个输出,然后是输入,然后是下一个输出,然后是输入等方式分别获取信息
我有一种感觉,这真的很简单,我就是不能让它工作
谢谢要在LINQ中展平列表,请使用。选择Many 许多类似的问题,例如:
最简单的方法是按照列出的顺序将列表41中的每个项目转换为IEnumerable,然后使用SelectMany展平生成的IEnumerable 请注意,我使用Enumerable.Repeatv,1来获取单例,还有其他方法
此外,您还可以内联调用SelectMany,但此时您可能需要切换查询语法,只需使用手动调用从/Select中选择第二个选项。此答案非常不完整。你能告诉他如何用使用SelectMany的查询语法重写他的示例吗?我在输入点列表中尝试了SelectMany,效果很好,但最终列表中没有包含我的输出点。这感觉就像我想要选择输出点并连接输入点列表,以创建我正在寻找的最终列表。它是否类似于:list41.SelectManyeq=>eq.INPUT\u POINTs,eq,inputs=>new{OUTPUT=eq.OUTPUT\u POINT,INPUTS=INPUTS.tolist您可以使用Select:list41.SelectManyeq=>eq.INPUT\u POINTs,eq,INPUTS=>new{eq=eq,INPUT=INPUTS.Selectt=>new进一步修改它{OutputPoint=t.OUTPUT,InputX=t.INPUT.X,InputY=t.INPUT.Y,InputZ=t.INPUT.Z.ToList;我们能看到涉及的每个类的声明吗请输入IO_方程,输入_点,输出_点,其他?这样我可以改进我的答案,而不是一段解释你的模型,模型的代码会更有用。这工作得很好。列出single输出,然后连接输入列表,这正是我想要做的。
var flattenedList = list1.SelectMany(i => i.PropertyThatIsAList)
var flat =
(from d2 in list41
select
Enumerable.Repeat(
new BINARY_IO {
propX = d2.propOutputPoint.propX,
propY = d2.propOutputPoint.propY,
propZ = d2.propOutputPoint.propZ,
propDir = POINT_DIRECTION_Types.Output}, 1)
.Concat(
from d3 in d2.propIOPointList
select new BINARY_IO {
propX = d3.propX,
propY = d3.propY,
propZ = d3.propZ,
propDir = POINT_DIRECTION_Types.Input}))
.SelectMany(i => i)
.ToList();