2014-02-27 157 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',而這很簡單。 –