如何进行嵌套列表操作?

goG*_*Gud 2 c# linq list

我试图调用嵌套列表操作.我有两个不同的列表,但Name是它们的公共变量.我有两个列表,这是我正在尝试的:

  1. selectedImage

    public int Id { get; set; }
    public int X { get; set; }
    public int Y { get; set; }
    public string Name { get; set; }
    
    Run Code Online (Sandbox Code Playgroud)
  2. generatedEyeDistance

    public string Name { get; set; }
    public double eyeDistance { get; set; }
    
    Run Code Online (Sandbox Code Playgroud)

我想调用generetedEyeDistance的eyeDistance值,但Name应该相同.我试过了 :

var asdasf = generatedEyeDistance.Where(f=> (f.Name) == (selectedImage.Select(name => name.Name))).ToList();
Run Code Online (Sandbox Code Playgroud)

但这会产生以下错误:

Operator '==' cannot be applied to operands of type 'string' and 'System.Collections.Generic.IEnumerable<string>'

我的方法看起来也错了.任何人都可以帮我解决这个问题吗?

Ser*_*kiy 7

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

from d in generatedEyeDistance
join i in selectedImage
    on d.Name equals i.Name
select d
Run Code Online (Sandbox Code Playgroud)

Lambda语法(我不喜欢连接,但..)

generatedEyeDistance.Join(selectedImage, d => d.Name, i => i.Name, (d,i) => d)
Run Code Online (Sandbox Code Playgroud)

BTW你有问题,因为selectedImage.Select(name => name.Name)返回名称序列,并且你试图将序列与距离名称进行比较.实际上你要检查是否存在与距离名称相同的图像:

generatedEyeDistance.Where(d => selectedImage.Any(i => i.Name == d.Name))
Run Code Online (Sandbox Code Playgroud)

但是join更有效率,因为它使用set而不是对每个距离进行子查询.

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

var names = new HashSet<string>(selectedImage.Select(i => i.Name));
var result = generatedEyeDistance.FindAll(d => names.Contains(d.Name));
Run Code Online (Sandbox Code Playgroud)