2011-03-22 62 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] };