2012-12-13 44 views
0

我有一個對象被稱爲MyConnection屬性的來源是類型列表我有麻煩編寫linq代碼來查找列表中的所有MyConnections連接有一個源「 」。來自屬性集合的過濾器集合Linq

我試過,但它似乎沒有運行..

MyConnection initialActivity = currentActivities.ToList().Where(x => x.Sources.Contains(String.Empty)); 

回答

0

.Where()返回匹配元素的序列

您不能將其分配給類型爲MyConnection的變量。

相反,您可以調用像.Last()這樣的方法來獲取單個元素。

0

如果你只是想獲得一個活動認爲具有「源」,而不是所有的人都,使用

MyConnection initialActivity = currentActivities.ToList() 
    .FirstOrDefault(x => x.Sources.Contains(String.Empty)); 

,這將給你null如果沒有這樣的活動,如果有一個或多個活動,則選擇第一個活動。

或者到FirstOrDefault,使用:

  • First給你的第一,但拋出一個異常,如果有沒有
  • Single給你一個單一的比賽,並拋出一個異常的有0或> 1匹配
  • SingleOrDefault給你一個單獨的比賽或不匹配,並且如果有> 1個匹配,則拋出和異常。

如果你想個個,返回類型將是一個IEnumerable<MyConnection>,沒有一個:

IEnumerable<MyConnection> initialActivities = = currentActivities.ToList() 
    .Where(x => x.Sources.Contains(String.Empty)); 

然後,您可以foreach在此,或致電其ToListToArray到得到一個列表或一個數組。

N.B.你可能不需要需要在的中間在這裏調用.ToList()

1

Where返回IEnumerable<MyConnection>不是一個MyConnection。所以你可以枚舉所有在foreach或採取一個f.e.與First

IEnumerable<MyConnection> allWithEmptySource = currentActivities 
    .Where(con => con.Sources.Any(s => string.IsNullOrEmpty(s))); 
if(allWithEmptySource.Any()) 
{ 
    MyConnection first = allWithEmptySource.First(); 
} 
+0

打我的IEnumerable –

+0

'Any'是不是真正的解決方案在這裏,假設源真的是' 「」''不null'; 'Contains'最好用於平等檢查,因爲它可以在'ICollection'上快捷。 – Rawling

+0

@Rawling:爲什麼'Any'不正確?他希望「在列表中找到所有'MyConnections',其中一個連接具有'String.Empty'的源。」因此,連接中可能有多個來源。但如果其中任何一個都是空的,他希望得到'MyConnection'。 –