LINQ用于填充范围
我不知道如何使用LINQ表达式完成本文的第二部分(for/foreach),也没有发现任何类似的LINQ示例。rangeDays大约在5到200之间,q1是一个MyClass列表,其中RowID大约在10000到25000之间,没有间隙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 =
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 });