C# 如何在Linq selectmany语句中使用方法?
如何在linq selectmany语句中使用方法C# 如何在Linq selectmany语句中使用方法?,c#,linq,C#,Linq,如何在linq selectmany语句中使用方法 public class BIT128Object { public long High {get; set;} public long Low {get; set;} public string Message {get; set;} } 此类用于表示位数组中的整数索引。 我想从BIT128Object中提取所有索引。 (确切地说,我想要索引和消息对的所有案例,就像group by一样) 我在下面定义了将高位和低位
public class BIT128Object
{
public long High {get; set;}
public long Low {get; set;}
public string Message {get; set;}
}
此类用于表示位数组中的整数索引。
我想从BIT128Object中提取所有索引。
(确切地说,我想要索引和消息对的所有案例,就像group by一样)
我在下面定义了将高位和低位解析为int索引数组的方法
private int[] ParseIndices(long high, long low)
{
List<int> indexList = new List<int>();
BitArray highBitArr = new BitArray(BitConverter.GetBytes(high));
if(highBitArr != null)
{
for (int i = 0; i < 64; ++i)
{
if (highBitArr.Get(i) == true)
indexList.Add(i + 64);
}
}
BitArray lowBitArr = new BitArray(BitConverter.GetBytes(low));
if(lowBitArr != null)
{
for (int i = 0; i < 64; ++i)
{
if (lowBitArr.Get(i) == true)
indexList.Add(i);
}
}
return indexList.ToArray();
}
下面是我的linq声明
var datum = bitObjectList.SelectMany(x => ParseIndices(x.High, x.Low)
.Select(z => new {
Index = z,
Message = x.Message
}));
但是在查询linq时会发生异常。
下面是异常消息
无法分析表达式“value(ClassName)”,因为它具有不受支持的
类型。仅查询源(即实现
IEnumerable)和查询运算符可以被解析
我调试了多达,我发现我无法将x.High和x.Low参数传递给parseIndexes()。也许我必须像parseindex(1010000)一样传递固定值。
在这种情况下,似乎无法在selectmany语句中使用方法
能给我一些帮助吗 不能在LINQ查询中使用
parseIndex(x.High,x.Low)
,因为LINQ无法识别和支持它。您需要另一种方法。是var datum=BitObjectList=。SelectMany
只是一个复制粘贴错误,还是这确实是您的实际代码?您提供的异常不能源于您问题中的代码。还有一件你没有给我们看的东西。请提供一个。我修复了我的问题,代码类似于dymanoid说这个异常不是来自您发布的代码。即使在我尝试它的时候,我也没有得到任何异常。你没有说你正在使用哪个LINQ提供程序,但是如果它是EF核心,那么可能是相关的,这是错误的<代码>解析索引在lambda中捕获,可以完美地用于LINQ查询。
var datum = bitObjectList.SelectMany(x => ParseIndices(x.High, x.Low)
.Select(z => new {
Index = z,
Message = x.Message
}));