C# 如何进行嵌套列表操作?

C# 如何进行嵌套列表操作?,c#,linq,list,C#,Linq,List,我正在尝试调用嵌套列表操作。我有两个不同的列表,但名称是它们的公共变量。我有两个列表,以下是我正在尝试的: 选择图像 public int Id { get; set; } public int X { get; set; } public int Y { get; set; } public string Name { get; set; } 生成距离 public string Name { get; set; } public double eyeDistance { get; set

我正在尝试调用嵌套列表操作。我有两个不同的列表,但名称是它们的公共变量。我有两个列表,以下是我正在尝试的:

  • 选择图像

    public int Id { get; set; }
    public int X { get; set; }
    public int Y { get; set; }
    public string Name { get; set; }
    
  • 生成距离

    public string Name { get; set; }
    public double eyeDistance { get; set; }
    
  • 我想调用GenerateDeyeDistance的eyeDistance值,但名称应该相同。我试过:

    var asdasf = generatedEyeDistance.Where(f=> (f.Name) == (selectedImage.Select(name => name.Name))).ToList();
    
    但这会产生以下错误:

    运算符“==”不能应用于“string”和“System.Collections.Generic.IEnumerable”类型的操作数。


    而且我的方法看起来也是错误的。有人能帮我解决这个问题吗

    如果要获取选定图像的生成距离,请在名称上加入两个集合:

    from d in generatedEyeDistance
    join i in selectedImage
        on d.Name equals i.Name
    select d
    
    Lambda语法(我不喜欢连接,但是..)

    顺便说一句,您有问题,因为
    selectedImage.Select(name=>name.name)
    返回名称序列,并且您正在尝试将序列与距离名称进行比较。实际上,您应该检查是否存在与距离名称同名的图像:

    generatedEyeDistance.Where(d => selectedImage.Any(i => i.Name == d.Name))
    
    但是join更有效,因为它使用set而不是对每个距离进行子查询

    更新:还有一个选项,如果您有距离列表,并且不想使用查询语法,那么您可以手动创建一组名称并筛选距离列表:

    var names = new HashSet<string>(selectedImage.Select(i => i.Name));
    var result = generatedEyeDistance.FindAll(d => names.Contains(d.Name));
    
    var Name=newhashset(selectedImage.Select(i=>i.Name));
    var result=generatedeydistance.FindAll(d=>names.Contains(d.Name));
    
    @musefan不,它将获得过滤后的距离列表-仅那些与images@musefan你怎么会这么想?OP声明“我想调用GenerateDeyeDistance的eyeDistance值”。同样从代码示例中,您可以看到OP尝试进行筛选distances@SergeyBerezovskiy对不起,我不太了解Lambda。你能帮我把d写在哪里吗。。。。。。命令?@goGud,如果您需要的结果是list
    var asdasf=(从中的d选择d).ToList()@SergeyBerezovskiy两者都有,但我现在明白了我可以管理我的物品的想法。你期望得到什么结果?是否要合并包含两组属性的项目列表?@musefan它应该返回double。
    
    var names = new HashSet<string>(selectedImage.Select(i => i.Name));
    var result = generatedEyeDistance.FindAll(d => names.Contains(d.Name));