我正在尝试将4个课程联系在一起:
我正在尝试创建一个列出所有组件类型的表,以及分配给它们的任何操作。 (我无法直接分配操作类型,因为其他属性必须保持唯一)
我正在尝试使用Linq查询基于其类型ID的唯一RigActions列表(以便我没有显示重复的装备操作类型)。这是我到目前为止所做的,但它似乎没有起作用。希望我想要完成的事情是有道理的......
快速备注
我遗漏了我认为与本课程无关的任何内容,如果您需要更多内容,请告诉我,我可以提供整个班级。
我也尝试将其设置为EntitySet,而不是列表,但也无法解决这个问题(如果可能的话,我更喜欢这样做)
public class ComponentType
{
public List<RigActionType> RigActionTypes = new List<RigActionType>();
public void GetRigActionTypes()
{
this.RigActionTypes = this.Components.SelectMany(component => component.RigActions).GroupBy(a => a.RigActionType).Select(at => at.All()).ToList();
}
}
我收到此错误消息:
Compiler Error Message: CS1501: No overload for method 'All' takes '0' arguments
答案 0 :(得分:2)
错误的原因是All
如果没有委托表达式就无法使用All(x => x.Something == 1)
(例如public void GetRigActionTypes()
{
this.RigActionTypes = this.Components.SelectMany(component => component.RigActions.RigActionTypes).Distinct().ToList();
}
),但在您的情况下则不需要。
这将获得唯一操作类型的列表:
{{1}}
如果您正在寻找其他内容,请澄清。
答案 1 :(得分:2)
All
不是你想要的 - 这个方法有助于验证集合中的所有元素是否满足某些条件。
如果您只想为每个组执行一个操作(即每个操作类型一个操作),您可以使用First作为示例(至少这是我从您的问题描述中获得的):
this.Components.SelectMany(component => component.RigActions)
.GroupBy(a => a.RigActionType)
.Select(at => at.First()).ToList();
但是你的属性表明你想拥有所有动作类型的集合,对吧?在这种情况下使用Distinct:
this.RigActionTypes = this.Components.SelectMany(component => component.RigActions)
.Select(a => a.RigActionType)
.Distinct()
.ToList();
或者你可以坚持分组方法:
this.RigActionTypes = this.Components.SelectMany(component => component.RigActions)
.GroupBy(a => a.RigActionType)
.Select(at => at.Key)
.ToList();