1

我不知道如何使用 LINQ 表达式来完成第二部分(for/foreach),也没有找到任何与 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;
    }
}

提前致谢。


更新:我用 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 “本地序列不能用于查询运算符的 LINQ to SQL 实现中,但包含运算符除外。” 当我尝试编译和运行时:

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

Ani 的回答略有不同:

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

差异:

  • 当只有一个选择时,我不关心查询表达式语法
  • 而不是使用 Range from 0 然后选择,我认为从 a.RowID 开始会更容易:)
于 2011-02-06T18:45:59.360 回答
0

我认为q1's 类型实际上应该是List<MyRowClass>或类似的(它当然不能是 a 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 回答