gpt4 book ai didi

c# - 如何使用 Linq 获取唯一的实体集?

转载 作者:太空宇宙 更新时间:2023-11-03 21:35:23 25 4
gpt4 key购买 nike

我有 4 个类要链接在一起:

  • 组件类型
    • 编号
    • 姓名
    • ...
  • 组件
    • 身份证
    • 组件类型ID
    • ...
  • RigAction
    • 编号
    • RigActionTypeID(指向下面的 RigActionType)
    • ComponentID(指向上面的组件)
  • RigActionType
    • 姓名
    • ...

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

我正在尝试使用 Linq 查询基于类型 ID 的唯一 RigActions 列表(这样我就不会出现重复的绑定(bind)操作类型)。到目前为止,这是我所拥有的,但它似乎没有用。希望我想要完成的事情是有意义的......

快速笔记

我省略了我认为与本类(class)无关的任何内容,如果您需要更多内容,请告诉我,我可以提供整个类(class)。

我也尝试过将它设置为一个 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

最佳答案

All 不是您要查找的内容 - 此方法有助于验证集合中的所有元素是否满足某些条件。

如果您只想每组执行一个操作(即每个操作类型执行一个操作),您可以使用 First 作为示例(至少这是我从您的问题描述中得出的结果):

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();

关于c# - 如何使用 Linq 获取唯一的实体集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22101142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com