2014-02-27 158 views
2

我想调用嵌套列表操作。我有两个不同的列表,但名称是它们的常用变量。我有两个列表,这里就是我想:如何进行嵌套列表操作?

  1. selectedImage

    public int Id { get; set; } 
    public int X { get; set; } 
    public int Y { get; set; } 
    public string Name { get; set; } 
    
  2. generatedEyeDistance

    public string Name { get; set; } 
    public double eyeDistance { get; set; } 
    

我想打电话给generetedEyeDistance的eyeDistance值,但名称应相同。我想:

var asdasf = generatedEyeDistance.Where(f=> (f.Name) == (selectedImage.Select(name => name.Name))).ToList(); 

但是这给了以下错误:

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

,也是我的做法看起来是错误的。任何人都可以帮我解决这个问题吗?

+0

是什么结果你预计?你是否想要包含两组属性合并的项目列表? – musefan

+0

@musefan它应该返回一倍。 – goGud

回答

7

如果你想获得所选图像生成的距离,然后在名称加入收藏都:

from d in generatedEyeDistance 
join i in selectedImage 
    on d.Name equals i.Name 
select d 

lambda语法(与联接我不喜欢它,但..)

generatedEyeDistance.Join(selectedImage, d => d.Name, i => i.Name, (d,i) => d) 

顺便说一句你有问题,因为selectedImage.Select(name => name.Name)返回名称序列,你试图比较序列与距离名称。其实你建议立即进行删除检查是否有同名的距离存在同名图像:

generatedEyeDistance.Where(d => selectedImage.Any(i => i.Name == d.Name)) 

但加入是更有效,因为它使用设定的,而不是做的子查询每个距离。

UPDATE:还有一个选项,如果你有距离的列表,并且不希望使用查询语法 - 那么你可以手动创建名称的设置和过滤列表的距离:

var names = new HashSet<string>(selectedImage.Select(i => i.Name)); 
var result = generatedEyeDistance.FindAll(d => names.Contains(d.Name)); 
+0

@musefan nope,它会得到过滤的距离列表 - 只有那些,与图像连接 –

+0

@musefan是什么让你这么想? OP声明*'我想调用generetedEyeDistance的eyeDistance值'*。同样从代码示例中,您可以看到OP试图过滤距离 –

+1

如果有的话,我想也许OP想要'选择d.eyeDistance',而这很简单。 –