이 두 번째 부분 (for/foreach)을 LINQ 식으로 수행하는 방법을 알아낼 수 없으며 LINQ와 유사한 예제를 찾지 못했습니다. rangeDays는 약 5와 200 사이이며, q1은 RowID가 약 10000에서 25000 사이 인 간격이없는 MyClasses 목록입니다.LINQ로 범위 채우기
public class MyClass { public int RowID; public object otherData; }
PopulateRange(int rangeDays, List<MyClass> q1){
var q2 = (from a in q1
let Rows = new int[rangeDays]
select new {a.RowID, Rows }).ToList();
foreach(var a in q2)
{
for(int i = 0; i < rangeDays; i++)
{
a.Rows[i] = a.RowID + i;
}
}
미리 감사드립니다.
업데이트
: 나는 (희망이이 시간 모든 실행 가능한 것입니다) 아래 그림과 같이이 두 LINQ 문으로 실행되었다.public List<MyClass> PopulateRange(int rangeDays, IQueryable<TheirClass> q1)
{
var q2 = (from a in q1
select new MyClass()
{ RowID = a.RowID, Rows = new int[rangeDays] }).ToList();
q2.ForEach(a => a.Rows = Enumerable.Range(0, rangeDays).
Select(i => i + a.RowID).ToArray());
return q2;
}
public class MyClass
{
public int RowID;
public int[] Rows;
}
public class TheirClass
{
public int RowID;
public int ID;
public string Symb;
public DateTime? EventTime;
public decimal? Value;
}
이 허용되지만 사람이 다음과 같은 하나의 문이 NotSupportedException이 발생 이유를 알고 않는다 "는이 연산자를 포함 제외 지역 순서가 쿼리 연산자의 SQL 구현에 LINQ에서 사용할 수 없습니다." 내가 & 실행을 컴파일 할 때 :
public List<MyClass> PopulateRange(int rangeDays, IQueryable<TheirClass> q1)
{
var q2 = (from a in q1
select new MyClass()
{ RowID = a.RowID, Rows = Enumerable.Range(0, rangeDays).
Select(i => i + a.RowID).ToArray() }).ToList();
return q2;
}
뭔가 잘못되었습니다. 'q1'은'List'이되어야합니다. 그래서'int'는'RowID' 속성을 어떻게 갖습니까? –
Gabe
... "행"은 어디에서 왔습니까? –
@ 존 Skeet : 행은'let' 절에 의해 소개됩니다. – Ani