【发布时间】:2011-02-06 16:41:44
【问题描述】:
我不知道如何使用 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;
}
【问题讨论】:
-
有些地方不太对劲。
q1应该是List<int>,那么int怎么会有RowID属性呢? -
...“行”从何而来?
-
@Jon Skeet:
Rows由let子句引入。 -
好的,我更新了 OP,因为 q1 不是一个列表,这显然混淆了这个问题。同样由于“=”的工作方式,我的原始帖子使所有行都具有相同的值。