LINQ式を使用して2番目の部分(for/foreach)を実行する方法を見つけることができず、LINQで類似の例が見つかりませんでした。 rangeDaysは約5から200の間であり、q1はMyClassesのリストであり、RowIDは約10000から25000までで、ギャップはありません。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;
}
}
ありがとうございます。
更新
: は、私は(うまくいけば、これはこの時間、すべての実行可能である)は、以下に示すように、これは2つの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;
}
これは許容ですが、誰もが、次の単一の文は、非サポート例外スローなぜ知らない「演算子が含まれてい除いローカルシーケンスがクエリ演算子の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
...「行」はどこから来たのですか? –
@Jon Skeet: 'Rows'は' let'節によって導入されました。 – Ani