Я не могу понять, как сделать вторую часть этого (for / foreach) с выражениями LINQ, и я не нашел подобных примеров с LINQ. rangeDays будет между 5 и 200, а q1 - это список MyClasses, где RowID - от 10000 до 25000, без пробелов.
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 «Локальная последовательность не может использоваться в реализациях операторов запросов LINQ to SQL, кроме оператора Contains». когда я пытаюсь скомпилировать и запустить:
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;
}