首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Linq获取唯一的实体集?

如何使用Linq获取唯一的实体集?
EN

Stack Overflow用户
提问于 2014-02-28 16:53:19
回答 2查看 114关注 0票数 1

我有四门课,我试着把它们联系起来:

  • ComponentType
    • id
    • 名字
    • ..。

  • 组件
    • Id
    • ComponentTypeID
    • ..。

  • RigAction
    • id
    • RigActionTypeID (指向下面的RigActionType )
    • ComponentID (指向上面的组件)

  • RigActionType
    • 名字
    • ..。

我正在尝试创建一个表,该表列出所有组件类型以及分配给它们的任何操作。(由于必须保持唯一的其他属性,我不能直接分配操作类型)

我试图使用Linq查询一个基于类型ID的唯一RigActions列表(这样我就不会出现重复的钻机操作类型)。这是我到目前为止所得到的,但似乎不起作用。希望我想要完成的事情是有意义的。

快速笔记

我忽略了任何我认为与这门课无关的东西,如果你还需要更多的话,让我知道,我可以提供整个课程。

我也尝试将其设置为EntitySet,而不是列表,但也搞不清楚(如果可能的话,我更愿意这样做)。

代码语言:javascript
复制
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();
    }
}

我收到以下错误消息:

代码语言:javascript
复制
Compiler Error Message: CS1501: No overload for method 'All' takes '0' arguments
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-28 17:01:52

All不是您想要的--这个方法有助于验证集合中的所有元素是否满足某种条件。

如果您希望每个组只需要一个动作(即每个动作类型一个动作),您可以首先使用(至少这是我从问题描述中得到的):

代码语言:javascript
复制
this.Components.SelectMany(component => component.RigActions)
               .GroupBy(a => a.RigActionType)
               .Select(at => at.First()).ToList();

但是,属性表示要拥有所有动作类型的集合,对吗?在这种情况下,使用不同的:

代码语言:javascript
复制
this.RigActionTypes = this.Components.SelectMany(component => component.RigActions)
                                     .Select(a => a.RigActionType)
                                     .Distinct()
                                     .ToList();

或者你可以坚持分组方式:

代码语言:javascript
复制
this.RigActionTypes = this.Components.SelectMany(component => component.RigActions)
                                     .GroupBy(a => a.RigActionType)
                                     .Select(at => at.Key)
                                     .ToList();
票数 2
EN

Stack Overflow用户

发布于 2014-02-28 17:01:28

导致此错误的原因是,如果没有委托表达式(例如,All ),就不能使用它,但在您的情况下,它是不需要的。

这将得到唯一动作类型的列表:

代码语言:javascript
复制
public void GetRigActionTypes()
{
    this.RigActionTypes = this.Components.SelectMany(component => component.RigActions.RigActionTypes).Distinct().ToList();
}

如果您正在寻找其他东西,请澄清。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22101142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档