我有四门课,我试着把它们联系起来:
我正在尝试创建一个表,该表列出所有组件类型以及分配给它们的任何操作。(由于必须保持唯一的其他属性,我不能直接分配操作类型)
我试图使用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发布于 2014-02-28 17:01:52
All不是您想要的--这个方法有助于验证集合中的所有元素是否满足某种条件。
如果您希望每个组只需要一个动作(即每个动作类型一个动作),您可以首先使用(至少这是我从问题描述中得到的):
this.Components.SelectMany(component => component.RigActions)
.GroupBy(a => a.RigActionType)
.Select(at => at.First()).ToList();但是,属性表示要拥有所有动作类型的集合,对吗?在这种情况下,使用不同的:
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();发布于 2014-02-28 17:01:28
导致此错误的原因是,如果没有委托表达式(例如,All ),就不能使用它,但在您的情况下,它是不需要的。
这将得到唯一动作类型的列表:
public void GetRigActionTypes()
{
this.RigActionTypes = this.Components.SelectMany(component => component.RigActions.RigActionTypes).Distinct().ToList();
}如果您正在寻找其他东西,请澄清。
https://stackoverflow.com/questions/22101142
复制相似问题