LINQ用于填充范围

LINQ用于填充范围,linq,foreach,range,let,Linq,Foreach,Range,Let,我不知道如何使用LINQ表达式完成本文的第二部分(for/foreach),也没有发现任何类似的LINQ示例。rangeDays大约在5到200之间,q1是一个MyClass列表,其中RowID大约在10000到25000之间,没有间隙 public class MyClass { public int RowID; public object otherData; } PopulateRange(int rangeDays, List<MyClass> q1){ var q2 =

我不知道如何使用LINQ表达式完成本文的第二部分(for/foreach),也没有发现任何类似的LINQ示例。rangeDays大约在5到200之间,q1是一个MyClass列表,其中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;
    }
}
public类MyClass{public int RowID;public对象otherData;}
PopulateRange(整数范围天,列表q1){
风险值q2=(来自q1中的a
让行=新整数[范围天数]
选择新的{a.RowID,Rows}).ToList();
foreach(第二季度的var a)
{
对于(int i=0;i
提前谢谢


更新: 我用如下所示的2条linq语句运行了这段代码(希望这次都可以运行)

public List PopulateRange(整数范围天,IQueryable q1)
{
风险值q2=(来自q1中的a
选择新建MyClass()
{RowID=a.RowID,Rows=new int[rangeDays]});
q2.ForEach(a=>a.Rows=Enumerable.Range(0,rangeDays)。
选择(i=>i+a.RowID).ToArray();
返回q2;
}
公共类MyClass
{
公共int RowID;
公共int[]行;
}
公共课堂
{
公共int RowID;
公共int ID;
公共字符串符号;
公共日期时间?事件时间;
公共十进制值;
}
这是可以接受的,但是有人知道为什么以下语句抛出NotSupportedException“本地序列不能用于查询运算符的LINQ到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;
}
public List PopulateRange(整数范围天,IQueryable q1)
{
风险值q2=(来自q1中的a
选择新建MyClass()
{RowID=a.RowID,Rows=Enumerable.Range(0,rangeDays)。
选择(i=>i+a.RowID).ToArray()}.ToList();
返回q2;
}

我认为
q1
的类型实际上应该是
List
或类似的类型(它当然不能是
List
)。 您可能想要:

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

          }).ToList();

Ani的回答略有不同:

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

  • 当只有一个select时,我不必担心查询表达式语法
  • 与使用从0开始的范围然后选择不同,我认为从a.RowID:)开始更容易

有些地方不太正确。
q1
应该是一个
列表
,那么
int
如何具有
RowID
属性?…以及“行”在哪里来自?@Jon Skeet:
是由
let
子句引入的。好吧,我更新了OP,因为q1不是一个列表,这显然混淆了问题。还因为“=”+1:虽然你提到的两个都是真的,但我试图对OP的代码,特别是循环进行“文字”转换。你们都是对的,我有一个类(new{int,object})。现在我得到了“NotSupportedException不支持查询运算符“Range”。消息不支持查询运算符“Range”。“这是在LinqPad中。我很快会在VS中运行。@Gary:这很奇怪……但我刚刚注意到,您正试图根据原始代码从
int
获取
RowID
,所以一定有什么您没有告诉我们的……难道
q1
实际上是一个数据库查询吗?”?
var q2 = q1.Select(a => new { Rows = Enumerable.Range(a.RowID, rangeDays)
                                               .ToArray(),
                              RowID = a.RowID });