1

LINQ式を使用してこの2番目の部分(for / foreach)を実行する方法がわかりません。また、LINQを使用した同様の例は見つかりませんでした。rangeDaysは約5から200の間であり、q1はRowIDがギャップなしで約10000から25000であるMyClassesのリストです。

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;
}

これは許容できますが、次の単一のステートメントがNotSupportedExceptionをスローする理由を誰もが知っています。「ローカルシーケンスは、Contains演算子を除くクエリ演算子のLINQtoSQL実装では使用できません。」コンパイルして実行しようとすると:

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;
}
4

2 に答える 2

2

アニの答えのわずかなバリエーション:

var q2 = q1.Select(a => new { Rows = Enumerable.Range(a.RowID, rangeDays)
                                               .ToArray(),
                              RowID = a.RowID });

違い:

  • 選択が 1 つしかない場合は、クエリ式の構文を気にしません。
  • Range from 0 を使用してから Select を使用するよりも、a.RowID から開始する方が簡単だと考えました :)
于 2011-02-06T18:45:59.360 に答える
0

q1のタイプは実際にはまたは類似しているべきだと思いますList<MyRowClass>(確かに ではありませんList<int>)。あなたはおそらく欲しい:

var q2 = (from a in q1
          select new
          {
              a.RowID,
              Rows = Enumerable.Range(0, rangeDays)
                               .Select(i => i + a.RowID)
                               .ToArray()

          }).ToList();
于 2011-02-06T16:47:31.097 に答える