2011-03-22 2 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가 작동하지 않아 각 반복마다 새 ArtworkLabel을 호출해야하므로 실제로 foreach를 사용할 수 없습니다.ASP.net C# LINQ for 루프

답변

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

나는 최근이 시도, 루프에 대한 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] }; 
.. 해낸 것입니다