2011-03-22 61 views
1
// Load all the links 
ArtworkingDataContext dc = new ArtworkingDataContext(); 
var q = (from Labels in dc.tblArtworkLabels where Labels.templateID == this.ID select new { LabelID = Labels.ID }); 

// Create labels array 
this.Labels = new ArtworkLabel[q.Count()]; 
for (int i = 0; i < q.Count(); i++) 
{ 
    this.Labels[i] = new ArtworkLabel(q.LabelID); 
} 

q.LabelID不起作用,我無法真正使用foreach,因爲我必須在每次迭代中調用一個新的ArtworkLabel。ASP.net c#LINQ for loop

回答

1

這會工作:

var queryList = q.ToList(); 
for (int i = 0; i < queryList.Count; i++) 
{ 
    this.Labels[i] = new ArtworkLabel(queryList[i].LabelID); 
} 

您也可以直接從你的查詢項目:

this.Labels = dc.tblArtworkLabels 
       .Where(x=> x.templateId == this.Id) 
       .Select(x=> new ArtworkLabel(x.ID)) 
       .ToArray(); 
1

嘗試這樣的:

this.Labels = q.Select(x => new ArtworkLabel(x.LabelID)).ToArray(); 
1

你可能只是這樣做,對不對?

ArtworkingDataContext dc = new ArtworkingDataContext(); 

this.Labels = 
    from label in dc.tblArtworkLabels 
    where label.templateID == this.ID 
    select new ArtworkLabel(label.ID).ToArray(); 
1

您應該可以在一個linq語句中完成所有操作。

ArtworkingDataContext dc = new ArtworkingDataContext(); 
this.Labels = (from Labels in dc.tblArtworkLabels where Labels.templateID == this.ID select new ArtworkLabel(Labels.ID)).ToArray(); 
0

最近我想這一點,for循環LINQ ..這就是我想出了..

 var query = from ii in Enumerable.Range(0, xml.AllIndexesOf("<item").Count()) 
        where ii < xml.AllIndexesOf("<item").Count() 
        select new { Start = xml.AllIndexesOf("<item").ToList()[sii], Count = xml.AllIndexesOf("</item").ToList()[sii] - xml.AllIndexesOf("<item").ToList()[sii] };