我正在學習MVC3並同時從C#轉換到VB.NET(我知道這很有趣)。我正在通過MvcMusicStore示例學習MVC3。所有的樣本都在C#中,所以我將它們轉換爲VB。我偶然發現了一段代碼,我無法直接轉換,只能稍作修改才能使其正常工作。爲什麼VB.NET Linq Lambda只能用一種方式工作,而不能用另一種方式
我不知道爲什麼一種方式有效,另一種不行。
這不起作用:
Dim albums = New List(Of Album)() From { _
New Album() With { _
.Title = "A Copland Celebration, Vol. I", _
.Genre = genres.[Single](Function(g) g.Name = "Classical"), _
.Price = 8.99D, _
.Artist = artists.[Single](Function(a) a.Name = "Aaron Copland & London Symphony Orchestra"), _
.AlbumArtUrl = "/Content/Images/placeholder.gif" _
}, _
... [MORE INSTANCES]
}.ForEach(Sub(a) context.Albums.Add(a))
然而,這沒有問題:
Dim albums = New List(Of Album)() From { _
New Album() With { _
.Title = "A Copland Celebration, Vol. I", _
.Genre = genres.[Single](Function(g) g.Name = "Classical"), _
.Price = 8.99D, _
.Artist = artists.[Single](Function(a) a.Name = "Aaron Copland & London Symphony Orchestra"), _
.AlbumArtUrl = "/Content/Images/placeholder.gif" _
}, _
... [MORE INSTANCES]
}
albums.ForEach(Sub(a) context.Albums.Add(a))
兩者的區別在於,首先應用foreach所創造,而集合第二次將ForEach作爲單獨的呼叫應用。
爲什麼這會有所作爲?
編輯:添加原始的C#代碼
編譯器不會抱怨這裏。
new List<Album>
{
new Album { Title = "A Copland Celebration, Vol. I", Genre = genres.Single(g => g.Name == "Classical"), Price = 8.99M, Artist = artists.Single(a => a.Name == "Aaron Copland & London Symphony Orchestra"), AlbumArtUrl = "/Content/Images/placeholder.gif" },
... [MORE INSTANCES]
}.ForEach(a => context.Albums.Add(a));
'ForEach'不是LINQ !!!這是'List' –
cadrell0